[user]
name = Hendrik Jäger
- email = henk@hnjs.ch
+ email = gitcommit@henk.geekmail.org
-# push/pull/diff/options
-[push]
- default = current
-[pull]
- default = current
- ff = only
-[diff]
- mnemonicprefix = true
[branch]
+ # always make new branches rebase on their tracking branch
autosetuprebase = always
-[apply]
- whitespace = nowarn
+[commit]
+ # show diff in commit message editor
+ verbose = true
+[diff]
+ # use (i)ndex, (w)orktree, (c)ommit, etc instead of a/ and b/
+ mnemonicprefix = true
+ # detect renames and copies
+ renames = copies
+ # use different color for moved code (default == zebra, currently)
+ colorMoved = default
+ # use vimdiff as difftool
+ tool = vimdiff
+[difftool]
+ # do not prompt before invoking difftool
+ prompt = false
+[fetch]
+ # delete tracking references and info about remote branches
+ # does not delete any branches
+ prune = true
+[format]
+ # show a lot of info by default
+ pretty=fuller
+[grep]
+ # show linenumber (-n)
+ lineNumber = true
+[log]
+ # show short commit sha
+ abbrevCommit = true
+ # show short ref names but only in terminal
+ decorate = auto
[merge]
+ # only do fastforward merges
+ ff = only
+ # use vimdiff as mergetool
+ tool = vimdiff
+[pretty]
+ longline = %C(auto)%h %<(52,trunc)%s (%aN, %GS %G?, %cr) %d
+ longlines = %C(auto)%h %<(52,trunc)%s (%aN, %GS %G?, %cr) %d %n%-w(0,8,8)%+b%-
+[push]
+ # push to branch with same name on remote
+ default = current
+ # also push reachable annotated tags
+ followTags = true
+[pull]
+ # rebase, don’t merge, local changes
+ rebase = true
+ # only accept fastforwards by default
ff = only
-
-[rerere]
- enabled = false
[rebase]
+ # when in a dirty worktree, automatically create a stash before and apply after rebasing
+ autoStash = true
+ # automatically squash marked commits (squash! …, fixup! …)
autosquash = true
+[rerere]
+ # don’t use rerere to resolve merge conflicts
+ enabled = false
-# alias {{{
[alias]
-# basic {{{
- pl = pull
- ps = push
- st = status -s
- cl = clone
- ci = commit
- co = checkout
- cob = checkout -b
- br = branch
- r = reset
- cp = cherry-pick
- gr = grep -Ii
- please = push --force-with-lease
-# }}}
-# tweak defaults {{{
- diff = diff --word-diff
- branch = branch -ra
- grep = grep -Ii
- bra = branch -ra
+ a = add
+ aa = add --all
ai = add --interactive
+ ap = add --patch
+ au = add --update
+
+ b = branch
+ br = branch
+ bra = branch --all
+
+ co = checkout
+ cob = checkout -b
+
+ cp = cherry-pick
+ cpa = cherry-pick --abort
+ cpc = cherry-pick --continue
+
+ c = commit
+ ca = commit --all
+ cm = commit --message
+ cma = commit --all --message
+ cmv = commit --verbose
+ cmav = commit --all --verbose
+ fix = commit --all --fixup
+
+ diff = diff --word-diff
+ d = diff --word-diff
+ dc = diff --cached
+ dlc = diff --cached HEAD^
+ ds = diff --staged
+ dr = "!f() { git diff -w "$1"^.."$1"; }; f"
+ diffr = "!f() { git diff "$1"^.."$1"; }; f"
+
# grep on filename
f = "!git ls-files | grep -i"
-# }}}
-# commit {{{
- cm = commit -m
- cma = commit -a -m
- cmv = commit -a -v
- ca = commit --amend
- amend = commit --amend
- caa = commit -a --amend -C HEAD
- fix = commit --fixup
-# }}}
-# log commands {{{
- ls = log --pretty=format:"%C(green)%h\\ %C(yellow)[%ad]%Cred%d\\ %Creset%s%Cblue\\ [%cn]" --decorate --date=relative
- ll = log --pretty=format:"%C(yellow)%h%Cred%d\\ %Creset%s%Cblue\\ [%cn]" --decorate --numstat
- lc = "!f() { git ll "$1"^.."$1"; }; f"
- lnc = log --pretty=format:"%h\\ %s\\ [%cn]"
- fl = log -u
- filelog = log -u
- lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
- lga = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --all
-# }}}
-# diff {{{
- d = diff --word-diff
- dc = diff --cached
- # diff last commit
- dlc = diff --cached HEAD^
- dr = "!f() { git diff -w "$1"^.."$1"; }; f"
- diffr = "!f() { git diff "$1"^.."$1"; }; f"
-# }}}
-# reset commands {{{
- r1 = reset HEAD^
- r2 = reset HEAD^^
- rh = reset --hard
- rh1 = reset HEAD^ --hard
- rh2 = reset HEAD^^ --hard
-# }}}
-# git svn {{{
- svnr = svn rebase
- svnd = svn dcommit
- svnl = svn log --oneline --show-commit
-# }}}
-# stash {{{
- sl = stash list
- sa = stash apply
- ss = stash save
-# }}}
-# assume aliases {{{
- assume = update-index --assume-unchanged
- unassume = update-index --no-assume-unchanged
- # show assumed files
- assumed = "!git ls-files -v | grep ^h | cut -c 3-"
- # unassume all the assumed files
- unassumeall = "!git assumed | xargs git update-index --no-assume-unchanged"
- assumeall = "!git status -s | awk {'print $2'} | xargs git assume"
-# }}}
-# subtree {{{
- # add
- sba = "!f() { git subtree add --prefix $2 $1 master --squash; }; f"
- # update/pull
- sbu = "!f() { git subtree pull --prefix $2 $1 master --squash; }; f"
-# }}}
-# various useful {{{
- # last tag created
- lasttag = "describe --tags --abbrev=0"
- lt = "describe --tags --abbrev=0"
+ g = grep -Ii
+ gr = grep -Ii
+ grep = grep -Ii
+
+ ls = log --pretty=format:"%C(green)%h\\ %C(yellow)[%ad]%Cred%d\\ %Creset%s%Cblue\\ [%cn]" --decorate
+ ll = log --graph --topo-order --date=short --abbrev-commit --decorate --all --boundary --pretty=format:'%Cgreen%ad %Cred%h%Creset -%C(yellow)%d%Creset %s %Cblue[%cn]%Creset %Cblue%G?%Creset'
+ lll = log --graph --topo-order --date=iso8601-strict --no-abbrev-commit --abbrev=40 --decorate --all --boundary --pretty=format:'%Cgreen%ad %Cred%h%Creset -%C(yellow)%d%Creset %s %Cblue[%cn <%ce>]%Creset %Cblue%G?%Creset'
+ lc = "!f() { git ll "$1"^.."$1"; }; f"
+ lnc = log --pretty=format:"%h\\ %s\\ [%cn]"
+ lo = log --oneline
+ lp = log --patch
+ fl = log -u
+ filelog = log -u
+ lg = log --graph --pretty=format:"%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset" --abbrev-commit
+ lga = log --graph --pretty=format:"%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset" --abbrev-commit --all
# tag logs
taglog = "log --tags --simplify-by-decoration --pretty='format:%ci %d'"
- # conflict/merges
- ours = "!f() { git co --ours $@ && git add $@; }; f"
- theirs = "!f() { git co --theirs $@ && git add $@; }; f"
+ pl = pull
+ pla = pull --all
- #list remotes
- rem="!git config -l | grep remote.*url | tail -n +2"
+ ps = push
+ please = push --force-with-lease
+
+ rem = remote
+ remp = remote prune
+ remu = remote update
+
+ rb = rebase
+ rba = rebase --abort
+ rbc = rebase --continue
+ rbi = rebase --interactive
+
+ r = reset
+ r1 = reset HEAD^
+ r2 = reset HEAD^^
+ rh = reset --hard
+ rh1 = reset --hard HEAD^
+ rh2 = reset --hard HEAD^^
+
+ rs = restore
+
+ sl = stash list
+ sa = stash apply
+ ss = stash save
- #apply patch from other local repo
- lap = "!f() { git --git-dir=$1 format-patch -k -1 --stdout $2 | git am -3 -k; }; f"
+ st = status --short
- #open markdown files edited in last commit
- last = "!gvim $(git show HEAD --format="" --name-only | grep -e .*md$ | xargs)"
- #open just created markdown in working directory
- newmd = "!gvim $(git status -s | awk {'print $2'})"
+ sw = switch
+
+ # add subtree
+ sba = "!f() { git subtree add --prefix $2 $1 master --squash; }; f"
+ # update/pull subtree
+ sbu = "!f() { git subtree pull --prefix $2 $1 master --squash; }; f"
# initial empty commit
empty = "!git commit -am\"[empty] Initial commit\" --allow-empty"
- # list all aliases
- la = "!git config -l | grep alias | cut -c 7-"
-# }}}
-# convoluted aliases {{{
- # grep from root folder
- gra = "!f() { A=$(pwd) && TOPLEVEL=$(git rev-parse --show-toplevel) && cd $TOPLEVEL && git grep --full-name -In $1 | xargs -I{} echo $TOPLEVEL/{} && cd $A; }; f"
- #rename branch tree to done-
- done = "!f() { git branch | grep "$1" | cut -c 3- | grep -v done | xargs -I{} git branch -m {} done-{}; }; f"
- #add bitbucket remote
- ra = "!f() { git remote add $1 https://bitbucket.org/$2.git; }; f"
-# }}}
-# worktree list {{{
wl = worktree list
- # undo from here http://megakemp.com/2016/08/25/git-undo/
- undo = "!f() { git reset --hard $(git rev-parse --abbrev-ref HEAD)@{${1-1}}; }; f"
-# }}}
-serve = !git daemon --reuseaddr --verbose --base-path=. --export-all ./.git
+ serve = daemon --reuseaddr --verbose --base-path=. --export-all ./.git