[alias] # View abbreviated SHA, description, and history graph of the latest 20 commits l = log --pretty=oneline -n 20 --graph --abbrev-commit # View the current working tree status using the short format s = status -s # Show the diff between the latest commit and the current state d = !"git diff-index --quiet HEAD -- || clear; git --no-pager diff --patch-with-stat" # `git di $number` shows the diff between the state `$number` revisions ago and the current state di = !"d() { git diff --patch-with-stat HEAD~$1; }; git diff-index --quiet HEAD -- || clear; d" # Pull in remote changes for the current repository and all its submodules p = !"git pull; git submodule foreach git pull origin master" # Checkout a pull request from origin (of a github repository) pr = !"pr() { git fetch origin pull/$1/head:pr-$1; git checkout pr-$1; }; pr" # Clone a repository including all submodules c = clone --recursive # Commit all changes ca = !git add -A && git commit -av # Switch to a branch, creating it if necessary go = "!f() { git checkout -b \"$1\" 2> /dev/null || git checkout \"$1\"; }; f" # Color graph log view graph = log --graph --color --pretty=format:"%C(yellow)%H%C(green)%d%C(reset)%n%x20%cd%n%x20%cn%x20(%ce)%n%x20%s%n" # Show verbose output about tags, branches or remotes tags = tag -l branches = branch -a remotes = remote -v # Amend the currently staged files to the latest commit amend = commit --amend --reuse-message=HEAD # Credit an author on the latest commit credit = "!f() { git commit --amend --author \"$1 <$2>\" -C HEAD; }; f" # Interactive rebase with the given number of latest commits reb = "!r() { git rebase -i HEAD~$1; }; r" # Find branches containing commit fb = "!f() { git branch -a --contains $1; }; f" # Find tags containing commit ft = "!f() { git describe --always --contains $1; }; f" # Find commits by source code fc = "!f() { git log --pretty=format:'%C(yellow)%h %Cblue%ad %Creset%s%Cgreen [%cn] %Cred%d' --decorate --date=short -S$1; }; f" # Find commits by commit message fm = "!f() { git log --pretty=format:'%C(yellow)%h %Cblue%ad %Creset%s%Cgreen [%cn] %Cred%d' --decorate --date=short --grep=$1; }; f" # Remove branches that have already been merged with master # a.k.a. ‘delete merged’ dm = "!git branch --merged | grep -v '\\*' | xargs -n 1 git branch -d; git remote -v update -p" # List contributors with number of commits contributors = shortlog --summary --numbered lg = log --color --decorate --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an (%G?)>%Creset' --abbrev-commit mdiff = "!f() { git stash | head -1 | grep -q 'No local changes to save'; x=$?; git merge --no-commit $1 &>/dev/null; git add -u &>/dev/null; git diff --staged; git reset --hard &>/dev/null; test $x -ne 0 && git stash pop &>/dev/null; }; f" # from seth vargo https://gist.github.com/sethvargo/6b2f7b592853381690bfe3bd00947e8f unreleased = "!f() { git fetch --tags && git diff $(git tag | tail -n 1); }; f" up = !git pull origin master && git remote prune origin && git submodule update --init --recursive undo = !git reset HEAD~1 --mixed top = !git log --format=format:%an | sort | uniq -c | sort -nr | head -n 20 # from trevor bramble https://twitter.com/TrevorBramble/status/774292970681937920 alias=!git config -l | grep ^alias | cut -c 7- | sort # View the whole history as a graph (commits only) tree = log --pretty=oneline --abbrev-commit --graph --all --decorate [apply] whitespace = fix [core] editor = vim whitespace = space-before-tab,-indent-with-non-tab,trailing-space [color "branch"] current = yellow reverse local = yellow remote = green [color "diff"] meta = yellow bold frag = magenta bold # line info old = red # deletions new = green # additions [color "status"] added = yellow changed = green untracked = cyan [delta] navigate = true # use n and N to move between diff sections [diff] # Detect copies as well as renames renames = copies colorMoved = default [help] # Automatically correct and execute mistyped commands autocorrect = 1 [merge] # Include summaries of merged commits in newly created merge commit messages log = true conflictstyle = diff3 [push] # change to maching for machines with older versions of git 1.x.x default = simple