Git configuration

Modify the file ~/.gitconfig

    [user]
        email = your@mail.com
        name = "Your Name"
        
    [color]
        # Enable colors in color-supporting terminals
        ui = auto
    
    [alias]
       # enable shortcut for each command
       st = status
       df = diff
       co = checkout
       ci = commit
       br = branch
       undo = git reset --soft HEAD^
       amend = commit --amend
       oneline = log --pretty=oneline --abbrev-commit --graph --decorate
       lg = log --graph --pretty=tformat:'%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%an %ar)%Creset'
       dif = diff --word-diff-regex=. --word-diff
       oops = commit --amend --no-edit
       review-local = lg @{push}..
    
    [core]
        autocrlf = input
        pager = cat
        # default editor for commit messages
        editor = nano
        excludesfile = ~/.gitignore_global
        whitespace = -trailing-space
        
    [diff]
        # Use better, descriptive initials (c, i, w) instead of a/b.
        mnemonicPrefix = true
        # Show renames/moves as such
        renames = true
        # When using --word-diff, assume --word-diff-regex=.
        wordRegex = .
        # Display submodule-related information (commit listings)
        submodule = log
    [fetch]
        # Auto-fetch submodule changes (sadly, won't auto-update)
        recurseSubmodules = on-demand
        
    [grep]
        # Consider most regexes to be ERE
        extendedRegexp = true
        
    [log]
        # Use abbrev SHAs whenever possible/relevant instead of full 40 chars
        abbrevCommit = true
        # Automatically --follow when given a single path
        follow = true
        
    [merge]
        # Display common-ancestor blocks in conflict hunks
        conflictStyle = diff3
        
    [mergetool]
        # Clean up backup files created by merge tools on tool exit
        keepBackup = false
        # Clean up temp files created by merge tools on tool exit
        keepTemporaries = false
        # Put the temp files in a dedicated dir anyway
        writeToTemp = true
        # Auto-accept file prompts when launching merge tools
        prompt = false
        
    [pull]
        # This is GREAT… when you know what you're doing and are careful
        # not to pull --no-rebase over a local line containing a true merge.
        # rebase = true
        # WARNING! This option, which does away with the one gotcha of
        # auto-rebasing on pulls, is only available from 1.8.5 onwards.
        rebase = preserve
        
    [push]
        # Default push should only push the current branch to its push target, regardless of its remote name
        default = upstream
        # When pushing, also push tags whose commit-ishs are now reachable upstream
        followTags = true
        
    [rerere]
        # If, like me, you like rerere, uncomment these
        # rerere is an advanced mechanism witch keep in memory conflic resolution
        # It can be pretty usefull when doing lot of old-branch merge 
        # But if you fail one conflit resolution, you need to manually remove it from cache
        # autoupdate = true
        # enabled = true
        
    [status]
        # Display submodule rev change summaries in status
        submoduleSummary = true
        # Recursively traverse untracked directories to display all contents
        showUntrackedFiles = all
        
    [color "branch"]
        # Blue on black is hard to read in git branch -vv: use cyan instead
        upstream = cyan
        
    [tag]
        # Sort tags as version numbers whenever applicable, so 1.10.2 is AFTER 1.2.0.
        sort = version:refname
        
    [versionsort]
        prereleaseSuffix = -pre
        prereleaseSuffix = .pre
        prereleaseSuffix = -beta
        prereleaseSuffix = .beta
        prereleaseSuffix = -rc
        prereleaseSuffix = .rc