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) |