[alias] l = log --pretty=oneline --graph s = status -s c = clone --recursive d = diff ff = merge --ff-only ca = !git add -A && git commit -av tb = rev-parse --abbrev-ref --symbolic-full-name @{u} rh = reset --hard cam = commit -am poh = push origin HEAD pohm = push origin HEAD:master suir = submodule update --init --recursive amend = commit -a --amend -C HEAD modified = diff HEAD --name-only untracked = "!u() { git status -s | grep "??" | awk '{print $2}'; }; u" dirty = "!t() { test -n \"$(git status --porcelain)\"; }; t" # diff tracking branch merge base dtbmb = !git diff `git tb`...HEAD root = rev-parse --show-toplevel ignore = "!i() { printf \"\n$1\" >> "`git root`/.gitignore"; }; i" ignore-untracked="!git untracked | xargs -n1 git ignore" power-clean = clean -ffd db = !"db() { git diff HEAD~"$1"; }; db" clone = clone --recursive branches = branch -a remotes = remote -v which-branch = "!wb() { b="$(git symbolic-ref HEAD)" && echo ${b#refs/heads/}; }; wb" sha = rev-parse HEAD branch-or-sha = "!bs() { git which-branch 2> /dev/null || git sha 2> /dev/null ; }; bs" # In newer versions of git, this simpler definition of which-branch would work. # symbolic-ref HEAD --short ffr = "!ffr() { git fetch $1 && git ff $1/$(git which-branch) && git suir; }; ffr" ffo = !git ffr origin reset-origin = "!r() { git reset --hard origin/\"$(git which-branch)\" && git suir; }; r" reset-author ="!source ~/.lib/shellrc/functions.sh && git_reset_author" # 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" # Diff a file or show it in git's pager if it is untracked du = "!d() { git ls-files $1 --error-unmatch 2>/dev/null 1>/dev/null && git diff $1 || `git config --get core.pager` $1; }; d" clean-branches = "!r() { git branch -r --merged ${1-origin/master} | xargs -n1 git branch -d; }; r" diff-excluding = "!f() { exclude=$1; shift; git diff $1 $2 --name-only | grep -v $exclude | xargs git diff "$@" --; }; f" aliases = "!f() { git config --get-regexp ^alias | cut -c 7-; }; f" file-exists = "!f() { git ls-files $1 --error-unmatch > /dev/null 2> /dev/null; }; f" shas = log HEAD --pretty=format:%H [core] # Use custom `.gitignore` and `.gitattributes` excludesfile = ~/.gitignore attributesfile = ~/.gitattributes pager = less -F -X [color] # Use colors in Git commands that are capable of colored output when # outputting to the terminal ui = auto [color "branch"] current = yellow reverse local = yellow remote = green [color "diff"] meta = yellow bold frag = magenta bold old = red bold new = green bold [color "status"] added = green changed = yellow untracked = red [merge] conflictstyle = diff3 [include] path = ~/.gitconfig.custom