HOW-TOs use:



    git config --global "Laurent Parmentier"
    git config --global

    Disable SSL check

    git config http.sslVerify "false"

    Note: Disable https non-valide certificate check for example

    Do not consider rights (chmod)

    git config core.fileMode false

    Note: Don't consider chmod of file. Which sometime caused a commit with all files of repo..


    Git flow


    Here is a good example of how to use branch in a development projet.

    Git branches

    See also Interesting Command: git-flow.



    # changes between branches
    git diff
    # changes between commits
    git diff 0023cdd..fcd6199

    Git diffs

    Git submodule

    This functionnality permits to have a git project in an other. To know more about see the official documentation here.

    Add a submodule

    It permit to add the external git project to the current.

    git submodule add ssh://user@sub.domain.tld:port/project.git directory

    Update a submodule

    git submodule update <path>

    if you have a lot of submodule, you could also update all in one time :

    git submodule foreach git pull remote branch

    Notice: It could happens problem if there is different key in submodule project. You will need to load all different private keys.

    Git crypt

    • Install: git-crypt init
    • Add gpg pub: git-crypt add-gpg-user USER_ID
    • Configure (.gitattributes): secretfile filter=git-crypt diff=git-crypt
    • Unlock: git-crypt unlock
    • List users: find .git-crypt/ -name *.gpg -exec sh -c 'basename {} | cut -d\. -f1 | xargs gpg --list-key' \;



    Permit to retrieve a repository.

    git clone ssh://user@sub.domain.tld:port/repo.git

    Choosing private key

    Choosing private key without ssh-agent((usefull on server)).

    Based on and

    If you have git v2.3+:

    	GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa_example" git clone example

    Else you need to create a script:


    ssh -i "/home/user/.ssh/id_rsa2" $@

    Note: I've try to use shift, and retrieve id_rsa from parameter $1 but does not work.

    export GIT_SSH=/usr/local/bin/ssh_for_git


    TODO study..


    Revert one merge:

    git revert -m 1 SHA_MERGE


    Cleanest way to resolve conflict

    git mergetool


    Undo modification of one file (current working / no commit)

    git checkout -- FILE

    Create empty branch

    git checkout --orphan NEWBRANCH

    Retrieve files from another branch

    Remark: will override the current one if exists

    git checkout FROM_BRANCH -- PATH
    git show BRANCH:PATH

    Retrieve specific commit and apply

    git cherry-pick origin/master HASH_COMMIT

    Create a patch file for a commit

    git format-patch -1 HASH_COMMIT

    Note: -1 represent the last 1((just himself)) patches from HASH_COMMIT

    Last date that a file has been changed through a commit

    git log -1 --pretty="format:%ci" PATH

    Presence of file in commits

    git log --folow -- PATH

    Summary of changements in a commit

    git diff --name-status HASH_COMMIT

    Signed all existing commits

    git rebase --exec 'git commit --amend --no-edit -n -S' -i development


    Delete local branch that do not exists remotely

    Use with caution, you could delete local work.

    git fetch --prune
    git branch -r | awk '{print $1}' | egrep -v -f /dev/fd/0 <(git branch -vv | grep origin) | awk '{print $1}' | xargs git branch -d


    Rebase all from the beginning

    git rebase -i --root


    Templates of gitignore


    This project contains a lot of template of gitignore adapt for different project((joomla, wordpress, ...))

    Retrieve files/directory from a repo

    git archive --remote=ssh://user@dmain.tld/repo.git HEAD | tar xvf -

    Note: does not work with Github

    Stash a file

    git stash push PATH

    Note: use --patch for an interactive mode (with multiple files)

    Change a file to an older commit

    git stash
    git rebase -i <old_commit-1>
    # put `edit` to the commit you want to change
    git stash apply
    git add <files to include>
    git commit --amend --no-edit
    git rebase --continue


    Point a branch to a specific commit

    git checkout <branch>
    git reset --hard <commit>