dotfiles/dotfiles/gitconfig

87 lines
2.9 KiB
Plaintext

[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 --merged ${1-origin/master} | grep -v '*' | 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
[rerere]
enabled = false