[user]
- name = Hendrik Jäger
- email = hendrik@securosys.ch
+ name = Hendrik Jäger
+ email = gitcommit@henk.geekmail.org
+ signingKey = 0x1B7EADFDDF720123
-# push/pull/diff/options
+[branch]
+ # always make new branches rebase on their tracking branch
+ autosetuprebase = always
+[commit]
+ # show diff in commit message editor
+ verbose = true
+[core]
+ # complain about tabs used for indenting
+ whitespace = tab-in-indent
+[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=compact
+[grep]
+ # show linenumber (-n)
+ lineNumber = true
+[log]
+ # show short commit sha
+ abbrevCommit = true
+ # show short ref names but only in terminal
+ decorate = auto
+[merge]
+ # use vimdiff as mergetool
+ tool = vimdiff
+[pretty]
+ compact = %C(auto)%h%Cgreen% cs%Cblue%<(15,trunc)% an%C(auto)%d%Creset% s
[push]
- default = current
+ # push to branch with same name on remote
+ default = current
+ # also push reachable annotated tags
+ followTags = true
[pull]
- default = current
-[diff]
- mnemonicprefix = true
-[branch]
- autosetuprebase = always
-[apply]
- whitespace = nowarn
-
-[rerere]
- enabled = false
+ # rebase, don’t merge, local changes
+ rebase = true
+ # only accept fastforwards by default
+ ff = only
[rebase]
- autosquash = true
+ # 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 {{{
- st = status -s
- cl = clone
- ci = commit
- co = checkout
- cob = checkout -b
- br = branch
- r = reset
- cp = cherry-pick
- gr = grep -Ii
-# }}}
-# tweak defaults {{{
- diff = diff --word-diff
- branch = branch -ra
- grep = grep -Ii
- bra = branch -ra
- ai = add --interactive
- # 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
-# }}}
-# 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"
-
- # 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"
-
- #list remotes
- rem="!git config -l | grep remote.*url | tail -n +2"
-
- #apply patch from other local repo
- lap = "!f() { git --git-dir=$1 format-patch -k -1 --stdout $2 | git am -3 -k; }; f"
-
- #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'})"
-
- # 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
+ a = add
+ aa = add --all
+ ai = add --interactive
+ ap = add --patch
+ au = add --update
+
+ b = branch
+ br = branch
+ bra = branch --all
+ brav = branch --all --verbose --verbose
+
+ co = checkout
+ cob = checkout -b
+
+ cp = cherry-pick
+ cpa = cherry-pick --abort
+ cpc = cherry-pick --continue
+
+ c = commit
+ ca = commit --all
+ cm = commit --message
+ cam = commit --all --message
+ fix = commit --all --fixup
+
+ 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"
+
+ g = grep -Ii
+ gr = grep -Ii
+ grep = grep -Ii
+
+ log = log --graph
+ l = log --graph
+ la = log --graph --all
+ lap = log --graph --all --patch
+ lp = log --patch
+ ls = log --stat
+ # tag logs
+ taglog = "log --tags --simplify-by-decoration --pretty='format:%ci %d'"
+
+ pl = pull
+ pla = pull --all
+
+ ps = push
+ please = push --force-with-lease
+
+ rem = remote
+ remp = remote prune
+ remu = remote update
+
+ frbp = "!f() { git fetch; git rebase "$1"; git push --force-with-lease; }; f"
+ 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
+ sp = stash pop
+ ss = stash save
+
+ st = status --short
+
+ 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"
+
+ wl = worktree list
+
+ serve = daemon --reuseaddr --verbose --base-path=. --export-all ./.git