Skip to content

Instantly share code, notes, and snippets.

Last active December 3, 2023 14:16
Show Gist options
  • Save donnfelker/764ffa606e2a5a7bfa5c236e1908297d to your computer and use it in GitHub Desktop.
Save donnfelker/764ffa606e2a5a7bfa5c236e1908297d to your computer and use it in GitHub Desktop.
Git and Fish
name = Your Name
email =
A = add -A
a = add
aa = add --all
ae = add --edit
ai = add --interactive
amend = commit --amend -C HEAD
ap = add --patch
au = add --update
authors = "!git log --pretty=format:%aN | sort | uniq -c | sort -rn"
b = branch
c = commit
ca = commit --amend
cam = commit -am
changes = diff --name-status -r
cm = commit --message
co = checkout
cpc = cherry-pick
cu = !git branch --merged | egrep -v \"(^\\*|master|main|develop)\" | xargs git branch -d
d = diff
dc = diff --cached
div = divergence
ds = diff --staged
fu = fetch upstream
mud = merge upstream/develop
h = help
ignored = !git ls-files -v | grep "^[[:lower:]]" | cut -c3-
irb = rebase --interactive
l = log --oneline --decorate
latest-tag = "!git describe --tags `git rev-list --tags --max-count=1`"
lg = log --graph --pretty=format:'%Cred%h%Creset %an -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset' --abbrev-commit --date=relative
ls-ignored = ls-files --exclude-standard --ignored --others
m = merge
mc = merge --continue
mm = merge --no-ff
msg = commit --allow-empty -m
p = cherry-pick -s
pick = cherry-pick
po = push origin
pom = push origin master
pofm = push origin HEAD:refs/for/master
pofd = push origin HEAD:refs/for/develop
pod = push origin develop
prune-remotes = "!for remote in `git remote`; do git remote prune $remote; done"
push = push --tags
r = remote
ra = !git log --graph --abbrev-commit --date=relative -20 --all --pretty='format:%C(yellow)%h%Creset -%C(red)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset'
rb = rebase
rba = rebase --abort
rbc = rebase --continue
rbs = rebase --skip
rh = reset --hard
ru = remote update --prune
s = status --short --branch
sl = shortlog
sm = submodule
sma = submodule add
smu = submodule update --init
st = stash
stl = stash list
stp = stash pop
tagcommit = !sh -c 'git rev-list $0 | head -n 1'
tree = log --graph --pretty=oneline --decorate
undo = reset --soft HEAD^
unwatch = update-index --assume-unchanged
up = pull --rebase --autostash
watch = update-index --no-assume-unchanged
wd = diff --color-words
wds = diff --color-words --staged
branch = auto
diff = auto
status = auto
interactive = auto
ui = true
pager = true
[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 = yellow
changed = green
untracked = cyan
autocorrect = 0
whitespace = nowarn
tool = diffmerge
[mergetool "diffmerge"]
cmd = diffmerge --merge --result=\"$MERGED\" \"$LOCAL\" \"$BASE\" \"$REMOTE\"
trustexitcode = false
keepBackup = false
default = current
tool = diffmerge
renames = copies
mnemonicprefix = true
prompt = false
[difftool "diffmerge"]
cmd = diffmerge \"$LOCAL\" \"$REMOTE\"
editor = code --wait
excludesfile = /Users/donnfelker/.gitignore_global
autocrlf = input
[filter "media"]
clean = git media clean %f
smudge = git media smudge %f
required = true
[filter "lfs"]
clean = git-lfs clean %f
smudge = git-lfs smudge %f
required = true
[difftool "sourcetree"]
cmd = opendiff \"$LOCAL\" \"$REMOTE\"
path =
[mergetool "sourcetree"]
cmd = /Applications/ \"$LOCAL\" \"$REMOTE\" -ancestor \"$BASE\" -merge \"$MERGED\"
trustExitCode = true
# Hat tip to Kaushik Gopal for some of this
# Prereqs:
# Install:
# VS Code Installed
# Git installed
# brew install git
# Install starship
# brew install starship
# SDKMan: curl -s "" | bash
# brew install zsh-syntax-highlighting
# brew install zsh-autosuggestions
# make zsh tab completion fix capitalization errors for directories and files
# i don't know if this is required anymore
# autoload -Uz compinit && compinit
# 0 -- vanilla completion (abc => abc)
# 1 -- smart case completion (abc => Abc)
# 2 -- word flex completion (abc => A-big-Car)
# 3 -- full flex completion (abc => ABraCadabra)
zstyle ':completion:*' matcher-list '' \
'm:{a-z\-}={A-Z\_}' \
'r:[^[:alpha:]]||[[:alpha:]]=** r:|=* m:{a-z\-}={A-Z\_}' \
'r:|?=** m:{a-z\-}={A-Z\_}'
# required for homebrew on M1s
eval "$(/opt/homebrew/bin/brew shellenv)"
eval "$(starship init zsh)"
# autcomplete customizations
autoload -U compinit
compdef g=git
# Edit Properties files of zsh, git, gradle
alias zshpro="code ~/.zshrc;. ~/.zshrc"
alias gitconfig="code ~/.gitconfig; ~/.gitconfig"
alias gradleprops="code ~/.gradle/"
alias g="git"
alias o="open ."
alias la="ls -Gla"
alias mv="mv -i" # Cause mv to write a prompt to standard error before moving a file that would overwrite an existing file.
# Restart ADB server
alias adbr="adb kill-server; adb start-server"
# Clean up all squashed and merged branches locally
alias gclean='git checkout -q main && git for-each-ref refs/heads/ "--format=%(refname:short)" | while read branch; do mergeBase=$(git merge-base main $branch) && [[ $(git cherry main $(git commit-tree $(git rev-parse "$branch^{tree}") -p $mergeBase -m _)) == "-"* ]] && git branch -D $branch; done'
androidBuildToolsVersion() {
# list the most recent files in a directory
ls -lt ${1+"$@"} | head -20;
# open a manpage in Preview, which can be saved to PDF
# Old versions of Mac preview is here: /Applications/
man -t "${1}" | open -f -a /System/Applications/
export EDITOR="code --wait"
export ANDROID_HOME="$HOME/Library/Android/sdk"
export ANDROID_BUILD_TOOLS_VERSION=`ls $ANDROID_HOME/build-tools | sort -r | head -n 1`
# Add ~/bin to the path for user specific binaries (drop anything into ~/bin to have it accessible)
export SDKMAN_DIR="$HOME/.sdkman"
[[ -s "$HOME/.sdkman/bin/" ]] && source "$HOME/.sdkman/bin/"
# has to be at the very end
source /opt/homebrew/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
source /opt/homebrew/share/zsh-autosuggestions/zsh-autosuggestions.zsh
# Add RVM to PATH for scripting. Make sure this is the last PATH variable change.
export PATH="$PATH:$HOME/.rvm/bin"
set -g theme_nerd_fonts yes
set -g theme_display_git_stashed_verbose yes
set -g theme_display_git_master_branch yes
set -g theme_display_git_untracked yes
set -g theme_display_git_dirty yes
set -g theme_display_virtualenv yes
set -Ux EDITOR code --wait
rvm default
nvm use 14.15
test -e {$HOME}/ ; and source {$HOME}/ ; or true
set -U fish_user_paths /usr/local/bin $fish_user_paths
function fishconfig
code ~/.config/fish/
function g
git $argv
function gitconf
code ~/.gitconfig
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment