|
#! /bin/sh |
|
|
|
# global git configuration presets for all local repository branches |
|
[init] |
|
|
|
defaultBranch = main |
|
|
|
[user] |
|
|
|
email = dylarcher@gmail.com |
|
name = Dylan Archer |
|
|
|
[core] |
|
|
|
autocrlf = input |
|
editor = code --wait |
|
ignorecase = false |
|
pager = less -FRX |
|
|
|
[credential] |
|
|
|
helper = osxkeychain |
|
|
|
[pull] |
|
|
|
rebase = true |
|
|
|
[push] |
|
|
|
autoSetupRemote = true |
|
|
|
[fetch] |
|
|
|
all = true |
|
prune = true |
|
pruneTags = true |
|
|
|
[branch] |
|
|
|
sort = -committerdate |
|
|
|
[commit] |
|
|
|
verbose = true # show diff in commit message editor |
|
|
|
[tag] |
|
|
|
sort = -version:refname |
|
|
|
[transfer] |
|
|
|
fsckObjects = true # validate object integrity on push/fetch |
|
|
|
[diff] |
|
|
|
algorithm = histogram # better than default Myers algorithm |
|
colorMoved = zebra |
|
tool = vscode |
|
|
|
[difftool "vscode"] |
|
|
|
cmd = code --wait --diff $LOCAL $REMOTE |
|
|
|
[merge] |
|
|
|
conflictstyle = zdiff3. # 3-way conflict markers with common ancestor |
|
tool = vscode |
|
|
|
[mergetool "vscode"] |
|
|
|
cmd = code --wait $MERGED |
|
|
|
[filter "lfs"] |
|
|
|
clean = git-lfs clean -- %f |
|
process = git-lfs filter-process |
|
required = true |
|
smudge = git-lfs smudge -- %f |
|
|
|
[rerere] |
|
|
|
autoupdate = true |
|
enabled = true |
|
|
|
[column] |
|
|
|
ui = auto |
|
|
|
[rebase] |
|
|
|
autoStash = true |
|
autoSquash = true |
|
updateRefs = true |
|
|
|
[status] |
|
|
|
branch = true |
|
short = true |
|
|
|
[log] |
|
|
|
abbrevCommit = true |
|
date = relative |
|
|
|
[alias] #? <https://gist.github.com/dylarcher/5ca71ed0a3b5d107bbcdc64e9a21a650#file-aliases-md> (alias usage defs) |
|
|
|
abort = "!git merge --abort 2>/dev/null || git cherry-pick --abort 2>/dev/null || git rebase --abort 2>/dev/null" |
|
aliases = "!git config --get-regexp '^alias\\.' | sed 's/alias\\.\\([^ ]*\\) /\\1 = /' | sort" |
|
amend = commit --amend --no-edit |
|
amendall = "!git add . && git amend && git push --force-with-lease" |
|
browse = "!gh repo view --web" |
|
changed = "!git diff --name-only $(git symbolic-ref refs/remotes/origin/HEAD | sed 's@refs/remotes/@@')...HEAD" |
|
changes = "!git log --oneline $(git symbolic-ref refs/remotes/origin/HEAD | sed 's@refs/remotes/@@')..HEAD" |
|
check = "!git tsc && git judilint --check && git juditidy --check" |
|
ci = "!gh run list --limit 5" |
|
ciwatch = "!gh run watch" |
|
conf = "!git config --list | grep -v '^alias\\.' | sort" |
|
contributors = shortlog --summary --numbered --no-merges |
|
cp = cherry-pick |
|
current = branch --show-current |
|
del = branch --delete --force |
|
delgone = "!git fetch -p && git branch -vv | grep ': gone]' | awk '{print $1}' | xargs -r git branch -D" |
|
delmrgd = "!git branch --merged | grep -vE '(main|master|develop|\\*)' | xargs -r git branch -d" |
|
delpr = "!gh pr list --state merged --author @me --json headRefName -q '.[].headRefName' | xargs -r -I{} git branch -D {}" |
|
delsame = "!f() { git branch --list \"*${1}*\" | xargs -r git branch -D; }; f" |
|
draft = "!gh pr create --fill --draft" |
|
dv = difftool |
|
edit = config --global --edit |
|
extend = "!git switch --create $(git branch --show-current)-extend" |
|
fixup = "!f() { git commit --fixup=${1}; }; f" |
|
fresh = "!f() { \ |
|
b=$(git symbolic-ref refs/remotes/origin/HEAD | sed 's@refs/remotes/@@'); \ |
|
git fetch origin && git reset --hard $b && git push --force-with-lease; \ |
|
}; f" |
|
history = log --oneline --decorate --graph -20 |
|
issue = "!gh issue create" |
|
issues = "!gh issue list --assignee @me" |
|
issueview = "!gh issue view --web" |
|
last = log -1 HEAD --stat |
|
latest = "!git fetch --all --prune && git pull" |
|
judilint = "!f() { \ |
|
b=$(git symbolic-ref refs/remotes/origin/HEAD | sed 's@refs/remotes/@@'); \ |
|
files=$(git diff --name-only --diff-filter=ACMR $b...HEAD | grep -E '\\.(js|ts|jsx|tsx)$'); \ |
|
[ -z \"$files\" ] && exit 0; if command -v biome &>/dev/null; \ |
|
then echo \"$files\" | xargs biome check ${@:---write}; \ |
|
else echo \"$files\" | xargs npx eslint ${@:---fix}; \ |
|
fi; \ |
|
}; f" |
|
juditidy = "!f() { \ |
|
b=$(git symbolic-ref refs/remotes/origin/HEAD | sed 's@refs/remotes/@@'); \ |
|
files=$(git diff --name-only --diff-filter=ACMR $b...HEAD | grep -E '\\.(js|ts|jsx|tsx|json|css|md)$'); \ |
|
[ -z \"$files\" ] && exit 0; if command -v biome &>/dev/null; \ |
|
then echo \"$files\" | xargs biome format ${@:---write}; \ |
|
else echo \"$files\" | xargs npx prettier ${@:---write}; \ |
|
fi; \ |
|
}; f" |
|
lsstash = stash show -p |
|
merge = "!gh pr merge --squash --delete-branch" |
|
new = switch --create |
|
nuke = "!git reset --hard && git clean -fd" |
|
pnpmver = "!f() { \ |
|
ver=$(perl -ne 'print $1 if /pnpm.*?([0-9]+[.][0-9.]+)/' package.json 2>/dev/null || echo 'latest'); \ |
|
corepack prepare pnpm@$ver --activate; \ |
|
}; f" |
|
pr = "!gh pr create --fill" |
|
prev = switch - |
|
prout = "!gh pr checkout" |
|
prs = "!gh pr list --author @me" |
|
prstatus = "!gh pr status" |
|
prview = "!gh pr view --web" |
|
rba = rebase --abort |
|
rbc = rebase --continue |
|
rbi = rebase --interactive |
|
recap = log --oneline --stat -10 |
|
recent = for-each-ref --sort=-committerdate --format='%(committerdate:relative)\t%(refname:short)' refs/heads/ --count=10 |
|
recommit = "!f() { \ |
|
b=$(git symbolic-ref refs/remotes/origin/HEAD | sed 's@refs/remotes/@@'); \ |
|
git fetch origin && git reset --soft $(git merge-base HEAD $b) && git merge $b --no-commit; \ |
|
}; f" |
|
reindex = "!git sync && git reset --hard $(git symbolic-ref refs/remotes/origin/HEAD | sed 's@refs/remotes/@@')" |
|
remotes = remote -v |
|
review = "!gh pr edit --add-reviewer" |
|
root = rev-parse --show-toplevel |
|
save = "!f() { git stash push -m \"${1:-$(git branch --show-current)-$(date +%Y%m%d-%H%M%S)}\"; }; f" |
|
squish = "!git reset --soft $(git merge-base HEAD @{upstream})" |
|
staged = diff --cached |
|
stashes = stash list |
|
stashpick = "!git stash list | fzf | cut -d: -f1 | xargs git stash apply" |
|
state = status --short --branch |
|
swap = switch |
|
sync = "!gh repo sync && git pull --all --prune" |
|
tags = tag --list --sort=-version:refname |
|
juditest = "!f() { \ |
|
b=$(git symbolic-ref refs/remotes/origin/HEAD | sed 's@refs/remotes/@@'); \ |
|
git diff --name-only --diff-filter=ACMR $b...HEAD | cut -d/ -f1-2 | sort -u | xargs -r -I{} pnpm --filter {} test; \ |
|
}; f" |
|
juditidy = "!f() { \ |
|
b=$(git symbolic-ref refs/remotes/origin/HEAD | sed 's@refs/remotes/@@'); \ |
|
git diff --name-only --diff-filter=ACMR $b...HEAD | grep -E '\\.(js|ts|jsx|tsx|json|css|md)$' | xargs -r npx prettier ${@:---write}; \ |
|
}; f" |
|
today = "!git log --author=$(git config user.email) --since=midnight --oneline" |
|
tree = log --oneline --decorate --graph --all |
|
tsc = "!npx tsc --noEmit --skipLibCheck" |
|
undo = reset --soft HEAD~1 |
|
unstage = reset HEAD -- |
|
untracked = ls-files --others --exclude-standard |
|
usepnpm = "!f() { corepack prepare pnpm@${1:-latest} --activate; }; f" |
|
wdiff = diff --word-diff |
|
week = "!git log --author=$(git config user.email) --since='1 week ago' --oneline" |
|
wip = "!git switch --create $(git branch --show-current)-wip-$(date +%Y%m%d-%H%M)" |