[alias]
a = "add"
aa = "add ."
aliases = "! f(){ TOP=$(expr $(grep -n "^\\\\[alias" ~/.gitconfig | sed -e 's|:.*||') + 1) && for LINE_NUMBER in $(grep -n "^\\\\[" ~/.gitconfig | sed -e 's|:.*||'); do [ $TOP -lt $LINE_NUMBER ] && BOTTOM= $(expr $LINE_NUMBER - 2 ) && break; done; sed -n "${TOP},${BOTTOM}p" ~/.gitconfig; }; f | sed -e 's|^  ||'"
ap = "add -p"
b = "! git for-each-ref --sort='-authordate' --format='%(authordate)%09%(objectname:short)%09%(refname)' refs/heads | sed -e 's|refs/heads/||'"
bD = "branch -D"
ba = "branch -a"
bc = "branch -c"
bd = "branch -d"
br = "branch -r"
c = "! git commit --verbose; git push"
ca = "! git c --amend"
cf = "! git commit --verbose; git push --force"
ch = "switch -C"
change = "switch -C"
cl = "clone"
cm = "commit -m"
co = "checkout "
cp = "cherry-pick  ; usually abusive; sometimes necessary"
create = "! git bc"
d = "diff"
dc = "diff --cached"
ds = "diff --stat"
expire = "! git fsck --unreachable --dangling --no-reflogs; git reflog expire --expire=now --all; git gc --prune=now"
f = "fetch"
fe = "fetch"
filelog = "log --patch"
find = "! git ls-files | grep -i"
fl = "log --patch"
fp = "fetch --prune ; removes branches not in upstream"
gr = "grep -Ii"
grep = "grep -Ii"
greproot = "! git grr"
grr = "! f() { ROOT=$(git rev-parse --show-toplevel) && cd $ROOT && git grep --full-name -In $1 | xargs -I{} echo $ROOT/{}; }; f"
invert = "revert"
l = "log --oneline --graph --decorate --parents"
lasttag = "describe --tags --abbrev=0"
ll = "log --pretty=format:"%C(yellow)%h%Cred%d\\ %Creset%s%Cblue\\ [%cn]" --decorate --numstat"
lref = "log --oneline --graph --decorate --parents --reflog"
ls = "log --pretty=format:"%C(yellow)%h\\ %ad%Cred%d\\ %Creset%s%Cblue\\ [%cn]" --decorate --date=short"
lt = "describe --tags --abbrev=0"
mailmap = "! f(){ printf \"$(git config user.name) <$(git config user.email)> <${1}>\" > mailmap; git filter-repo --force --mailmap mailmap; }; f"
one = "log -1  ; no input displays HEAD"
pd = "push -d"
pf = "push --force"
pl = "pull"
pp = "pull --prune ; removes branches not in upstream"
pr = "pull --rebase ; rebases commits onto upstream"
ps = "push"
pt = "! f(){ git push $1 tag $2; }; f"
r = "rebase"
ra = "rebase --skip"
rc = "rebase --continue"
re = "restore"
ref = "reflog"
ri = "rebase --interactive"
rm = "rm -r"
rmf = "! git rm --force"
rq = "rebase --quit"
rs = "rebase --abort"
sh = "show"
st = "status"
sw = "switch   ; new checkout - only switching branch w/o restoring worktree"
sync = "! git fe upstream; git rebase upstream/main; git push"
t = "tag"
td = "tag --delete"
un = "restore --staged --worktree"
uncommit = "switch -C"
undo = "restore --staged --worktree"
undo-specific = "! f(){ git restore --source=\"$1\" $2; }; f"
undo-stage = "restore"
undo-unstaged = "restore"
undo-work = "restore --staged --worktree"
undo-wt = "restore --staged --worktree"
unstage = "restore --staged"
wa = "! f(){ git worktree add ../$1 $1; }; f"
wc = "! f(){ PROJ=$(printf $1 | sed -e 's|.*/||' | sed -e 's|.git||'); mkdir $PROJ; cd $PROJ; if git ls-remote $1 | grep -q "main"; then BRANCH="main"; elif git ls-remote $1 | grep -q "master"; then BRANCH="master"; elif git ls-remote $1 | grep -q "trunk"; then BRANCH="trunk"; fi; git clone $1 $BRANCH; }; f"
wcreate = "! git wc"
wmv = "worktree move"
wnew = "! f(){ git worktree add ../$1; cd ../$1; git push --set-upstream origin $1; }; f"
wr = "worktree remove"
wrm = "! git wr"
wsc = "! f(){ PROJ=$(printf $1 | sed -e 's|.*/||' | sed -e 's|.git||'); mkdir $PROJ; cd $PROJ; if git ls-remote $1 | grep -q "main"; then BRANCH="main"; elif git ls-remote $1 | grep -q "master"; then BRANCH="master"; elif git ls-remote $1 | grep -q "trunk"; then BRANCH="trunk"; fi; git clone --depth=1 --single-branch $1 $BRANCH; }; f"
wshallow = "! git wsc"

[branch]
autosetuprebase = "always"

[color]
branch = "auto"
diff = "auto"
status = "auto"

[commit]
gpgsign = "true"

[gpg]
format = "ssh"

[user]
email = "amad@atl.tools"
name = "Artur Manuel"
signingKey = "~/.ssh/id_ed25519.pub"

[init]
defaultBranch = "main"

[credential]
helper ="git-credential-libsecret"