ohmyzsh/plugins/git/README.md

40 KiB

git plugin

The git plugin provides many aliases and a few useful functions.

To use it, add git to the plugins array in your zshrc file:

plugins=(... git)

Aliases

Alias Command
grt cd "$(git rev-parse --show-toplevel || echo .)"
ggpnp ggl && ggp
ggpur ggu
g git
ga git add
gaa git add --all
gapa git add --patch
gau git add --update
gav git add --verbose
gwip git add -A; git rm $(git ls-files --deleted) 2> /dev/null; git commit --no-verify --no-gpg-sign --message "--wip-- [skip ci]"
gam git am
gama git am --abort
gamc git am --continue
gamscp git am --show-current-patch
gams git am --skip
gap git apply
gapt git apply --3way
gbs git bisect
gbsb git bisect bad
gbsg git bisect good
gbsr git bisect reset
gbss git bisect start
gbl git blame -b -w
gb git branch
gba git branch --all
gbd git branch --delete
gbD git branch --delete --force
gbda git branch --no-color --merged | grep -vE "^([+]|\s($(git_main_branch)|$(git_develop_branch))\s*$)" | xargs git branch --delete 2>/dev/null
gbgd LANG=C git branch --no-color -vv
gbgD LANG=C git branch --no-color -vv
gbnm git branch --no-merged
gbr git branch --remote
ggsup git branch --set-upstream-to=origin/$(git_current_branch)
gbg LANG=C git branch -vv
gco git checkout
gcor git checkout --recurse-submodules
gcb git checkout -b
gcd git checkout $(git_develop_branch)
gcm git checkout $(git_main_branch)
gcp git cherry-pick
gcpa git cherry-pick --abort
gcpc git cherry-pick --continue
gclean git clean --interactive -d
gcl git clone --recurse-submodules
gccd git clone --recurse-submodules "$@" && cd "$(basename $_ .git)"
gcam git commit --all --message
gcas git commit --all --signoff
gcasm git commit --all --signoff --message
gcmsg git commit --message
gcsm git commit --signoff --message
gc git commit --verbose
gca git commit --verbose --all
gca! git commit --verbose --all --amend
gcan! git commit --verbose --all --no-edit --amend
gcans! git commit --verbose --all --signoff --no-edit --amend
gc! git commit --verbose --amend
gcn! git commit --verbose --no-edit --amend
gcs git commit -S
gcss git commit -S -s
gcssm git commit -S -s -m
gcf git config --list
gdct git describe --tags $(git rev-list --tags --max-count=1)
gd git diff
gdca git diff --cached
gdcw git diff --cached --word-diff
gds git diff --staged
gdw git diff --word-diff
gdv git diff -w $@ | view -
gdup git diff @{upstream}
gdnolock git diff $@ ":(exclude)package-lock.json" ":(exclude)*.lock"
gdt git diff-tree --no-commit-id --name-only -r
gf git fetch
gfa git fetch --all --prune
gfo git fetch origin
gg git gui citool
gga git gui citool --amend
ghh git help
glgg git log --graph
glgga git log --graph --decorate --all
glgm git log --graph --max-count=10
glod git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ad) %C(bold blue)<%an>%Creset'
glods git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ad) %C(bold blue)<%an>%Creset' --date=short
glol git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset'
glola git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset' --all
glols git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset' --stat
glo git log --oneline --decorate
glog git log --oneline --decorate --graph
gloga git log --oneline --decorate --graph --all
glp git log --pretty=<format>
glg git log --stat
glgp git log --stat --patch
gignored git ls-files -v | grep "^:lower:"
gfg git ls-files | grep
gm git merge
gma git merge --abort
gms git merge --squash
gmom git merge origin/$(git_main_branch)
gmum git merge upstream/$(git_main_branch)
gmtl git mergetool --no-prompt
gmtlvim git mergetool --no-prompt --tool=vimdiff
gl git pull
gpr git pull --rebase
gup git pull --rebase
gupa git pull --rebase --autostash
gupav git pull --rebase --autostash --verbose
gupv git pull --rebase --verbose
ggu git pull --rebase origin $(current_branch)
gupom git pull --rebase origin $(git_main_branch)
gupomi git pull --rebase=interactive origin $(git_main_branch)
ggpull git pull origin "$(git_current_branch)"
ggl git pull origin $(current_branch)
gluc git pull upstream $(git_current_branch)
glum git pull upstream $(git_main_branch)
gp git push
gpd git push --dry-run
gpf! git push --force
ggf git push --force origin $(current_branch)
gpf git push --force-with-lease --force-if-includes (git version >= 2.30)
gpf git push --force-with-lease (git version < 2.30)
ggfl git push --force-with-lease origin $(current_branch)
gpsup git push --set-upstream origin $(git_current_branch)
gpsupf git push --set-upstream origin $(git_current_branch) --force-with-lease --force-if-includes (git version >= 2.30)
gpsupf git push --set-upstream origin $(git_current_branch) --force-with-lease (git version < 2.30)
gpv git push --verbose
gpoat git push origin --all && git push origin --tags
gpod git push origin --delete
ggpush git push origin "$(git_current_branch)"
ggp git push origin $(current_branch)
gpu git push upstream
grb git rebase
grba git rebase --abort
grbc git rebase --continue
grbi git rebase --interactive
grbo git rebase --onto
grbs git rebase --skip
grbd git rebase $(git_develop_branch)
grbm git rebase $(git_main_branch)
grbom git rebase origin/$(git_main_branch)
gr git remote
grv git remote --verbose
gra git remote add
grrm git remote remove
grmv git remote rename
grset git remote set-url
grup git remote update
grh git reset
gru git reset --
grhh git reset --hard
gpristine git reset --hard && git clean -dffx
groh git reset origin/$(git_current_branch) --hard
grs git restore
grss git restore --source
grst git restore --staged
gunwip git rev-list --max-count=1 --format="%s" HEAD | grep -q "--wip--" && git reset HEAD~1
grev git revert
grm git rm
grmc git rm --cached
gcount git shortlog --summary -n
gsh git show
gsps git show --pretty=short --show-signature
gstall git stash --all
gstu git stash --include-untracked
gstaa git stash apply
gstc git stash clear
gstd git stash drop
gstl git stash list
gstp git stash pop
gsta git stash push (git version >= 2.13)
gsta git stash save (git version < 2.13)
gsts git stash show --text
gst git status
gss git status --short
gsb git status --short -b
gsi git submodule init
gsu git submodule update
gsd git svn dcommit
git-svn-dcommit-push git svn dcommit && git push github $(git_main_branch):svntrunk
gsr git svn rebase
gsw git switch
gswc git switch -c
gswd git switch $(git_develop_branch)
gswm git switch $(git_main_branch)
gts git tag -s
gtv git tag | sort -V
gignore git update-index --assume-unchanged
gunignore git update-index --no-assume-unchanged
gwch git whatchanged -p --abbrev-commit --pretty=medium
gwt git worktree
gwtls git worktree list
gwtmv git worktree move
gwtrm git worktree remove
gk gitk --all --branches &!
gke gitk --all $(git log --walk-reflogs --pretty=%h) &!
gtl gtl(){ git tag --sort=-v:refname -n --list ${1}* }; noglob gtl

Main branch preference

Following the recent push for removing racially-charged words from our technical vocabulary, the git plugin favors using a branch name other than master. In this case, we favor the shorter, neutral and descriptive term main. This means that any aliases and functions that previously used master, will use main if that branch exists. We do this via the function git_main_branch.

Deprecated aliases

These are aliases that have been removed, renamed, or otherwise modified in a way that may, or may not, receive further support.

Alias Command Modification
gap git add --patch new alias gapa
gcl git config --list new alias gcf
gdc git diff --cached new alias gdca
gdt git difftool no replacement
ggpull git pull origin $(current_branch) new alias ggl (ggpull still exists for now though)
ggpur git pull --rebase origin $(current_branch) new alias ggu (ggpur still exists for now though)
ggpush git push origin $(current_branch) new alias ggp (ggpush still exists for now though)
gk gitk --all --branches now aliased to gitk --all --branches
glg git log --stat --max-count = 10 now aliased to git log --stat --color
glgg git log --graph --max-count = 10 now aliased to git log --graph --color
gwc git whatchanged -p --abbrev-commit --pretty = medium new alias gwch

Functions

Current

Command Description
current_branch Return the name of the current branch
git_current_user_email Returns the user.email config value (lives in lib/git.zsh)
git_current_user_name Returns the user.name config value (lives in lib/git.zsh)
git_develop_branch Returns the name of the develop branch: dev, devel, development if they exist, develop otherwise
git_main_branch Returns the name of the main branch: main if it exists, master otherwise
grename <old> <new> Rename old branch to new, including in origin remote

Work in Progress (WIP)

These features allow to pause a branch development and switch to another one ("Work in Progress", or wip). When you want to go back to work, just unwip it.

Command Description
gwip Commit wip branch
gunwip Uncommit wip branch
gunwipall Uncommit all recent --wip-- commits
work_in_progress Echoes a warning if the current branch is a wip

Note that gwip and gunwip are effectivly alias, but are also documented here to group all related WIP features.

Deprecated functions

Command Description Reason
current_repository Return the names of the current remotes Didn't work properly. Use git remote -v instead (grv alias)