[branch]
# always make new branches rebase on their tracking branch
autosetuprebase = always
+[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
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
enabled = false
[alias]
-# basic {{{
- pl = pull
- pla = pull --all
- 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
- diff = diff --word-diff
- branch = branch -ra
- grep = grep -Ii
- bra = branch -ra
- a = add
- ap = add -p
+ 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"
- 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 -a --fixup
- 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
- 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"
- r1 = reset HEAD^
- r2 = reset HEAD^^
- rh = reset --hard
- rh1 = reset HEAD^ --hard
- rh2 = reset HEAD^^ --hard
- svnr = svn rebase
- svnd = svn dcommit
- svnl = svn log --oneline --show-commit
- sl = stash list
- sa = stash apply
- ss = stash save
- 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"
- # 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"
- # 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
- #apply patch from other local repo
- lap = "!f() { git --git-dir=$1 format-patch -k -1 --stdout $2 | git am -3 -k; }; f"
+ rem = remote
+ remp = remote prune
+ remu = remote update
- #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'})"
+ 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
+
+ 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"
- # list all aliases
- la = "!git config -l | grep alias | cut -c 7-"
- # 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"
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