summaryrefslogtreecommitdiff
path: root/home/.oh-my-zsh/plugins/git
diff options
context:
space:
mode:
Diffstat (limited to 'home/.oh-my-zsh/plugins/git')
-rw-r--r--home/.oh-my-zsh/plugins/git/README.md290
-rw-r--r--home/.oh-my-zsh/plugins/git/git.plugin.zsh430
2 files changed, 720 insertions, 0 deletions
diff --git a/home/.oh-my-zsh/plugins/git/README.md b/home/.oh-my-zsh/plugins/git/README.md
new file mode 100644
index 0000000..edddc8c
--- /dev/null
+++ b/home/.oh-my-zsh/plugins/git/README.md
@@ -0,0 +1,290 @@
+# git plugin
+
+The git plugin provides many [aliases](#aliases) and a few useful [functions](#functions).
+
+To use it, add `git` to the plugins array in your zshrc file:
+
+```zsh
+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` |
+| `gbsn` | `git bisect new` |
+| `gbso` | `git bisect old` |
+| `gbsr` | `git bisect reset` |
+| `gbss` | `git bisect start` |
+| `gbl` | `git blame -w` |
+| `gb` | `git branch` |
+| `gba` | `git branch --all` |
+| `gbd` | `git branch --delete` |
+| `gbD` | `git branch --delete --force` |
+| `gbgd` | `LANG=C git branch --no-color -vv \| grep ": gone\]" \| cut -c 3- \| awk '"'"'{print $1}'"'"' \| xargs git branch -d` |
+| `gbgD` | `LANG=C git branch --no-color -vv \| grep ": gone\]" \| cut -c 3- \| awk '"'"'{print $1}'"'"' \| xargs git branch -D` |
+| `gbm` | `git branch --move` |
+| `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 \| grep ": gone\]"` |
+| `gco` | `git checkout` |
+| `gcor` | `git checkout --recurse-submodules` |
+| `gcb` | `git checkout -b` |
+| `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` |
+| `gclf` | `git clone --recursive --shallow-submodules --filter=blob:none --also-filter-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` |
+| `gcann!` | `git commit --verbose --all --date=now --no-edit --amend` |
+| `gc!` | `git commit --verbose --amend` |
+| `gcn` | `git commit --verbose --no-edit` |
+| `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` |
+| `gcfu` | `git commit --fixup` |
+| `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 --tags --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` |
+| `gmc` | `git merge --continue` |
+| `gms` | `git merge --squash` |
+| `gmff` | `git merge --ff-only` |
+| `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` |
+| `gprv` | `git pull --rebase -v` |
+| `gpra` | `git pull --rebase --autostash` |
+| `gprav` | `git pull --rebase --autostash -v` |
+| `gprom` | `git pull --rebase origin $(git_main_branch)` |
+| `gpromi` | `git pull --rebase=interactive origin $(git_main_branch)` |
+| `gprum` | `git pull --rebase upstream $(git_main_branch)` |
+| `gprumi` | `git pull --rebase=interactive upstream $(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` | On Git >= 2.30: `git push --force-with-lease --force-if-includes` |
+| `gpf` | On Git < 2.30: `git push --force-with-lease` |
+| `ggfl` | `git push --force-with-lease origin $(current_branch)` |
+| `gpsup` | `git push --set-upstream origin $(git_current_branch)` |
+| `gpsupf` | On Git >= 2.30: `git push --set-upstream origin $(git_current_branch) --force-with-lease --force-if-includes` |
+| `gpsupf` | On Git < 2.30: `git push --set-upstream origin $(git_current_branch) --force-with-lease` |
+| `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)` |
+| `grbum` | `git rebase upstream/$(git_main_branch)` |
+| `grf` | `git reflog` |
+| `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` |
+| `grhk` | `git reset --keep` |
+| `grhs` | `git reset --soft` |
+| `gpristine` | `git reset --hard && git clean --force -dfx` |
+| `gwipe` | `git reset --hard && git clean --force -df` |
+| `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` | On Git >= 2.13: `git stash push` |
+| `gsta` | On Git < 2.13: `git stash save` |
+| `gsts` | `git stash show --patch` |
+| `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)` |
+| `gta` | `git tag --annotate` |
+| `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`. |
+| `gup` | `git pull --rebase` | now alias `gpr` |
+| `gupv` | `git pull --rebase -v` | now alias `gprv` |
+| `gupa` | `git pull --rebase --autostash` | now alias `gpra` |
+| `gupav` | `git pull --rebase --autostash -v` | now alias `gprav` |
+| `gupom` | `git pull --rebase origin $(git_main_branch)` | now alias `gprom` |
+| `gupomi` | `git pull --rebase=interactive origin $(git_main_branch)` | now alias `gpromi` |
+
+## Functions
+
+### Current
+
+| Command | Description |
+| :----------------------- | :-------------------------------------------------------------------------------------------------------------- |
+| `current_branch` | Returns 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 “development” 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>` | Renames branch `<old>` to `<new>`, including on the origin remote. |
+| `gbda` | Deletes all merged branches |
+| `gbds` | Deletes all squash-merged branches (**Note: performance degrades with number of branches**) |
+
+### Work in Progress (WIP)
+
+These features allow you to pause developing one branch 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 aliases, 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). |
diff --git a/home/.oh-my-zsh/plugins/git/git.plugin.zsh b/home/.oh-my-zsh/plugins/git/git.plugin.zsh
new file mode 100644
index 0000000..1d043da
--- /dev/null
+++ b/home/.oh-my-zsh/plugins/git/git.plugin.zsh
@@ -0,0 +1,430 @@
+# Git version checking
+autoload -Uz is-at-least
+git_version="${${(As: :)$(git version 2>/dev/null)}[3]}"
+
+#
+# Functions Current
+# (sorted alphabetically by function name)
+# (order should follow README)
+#
+
+# The name of the current branch
+# Back-compatibility wrapper for when this function was defined here in
+# the plugin, before being pulled in to core lib/git.zsh as git_current_branch()
+# to fix the core -> git plugin dependency.
+function current_branch() {
+ git_current_branch
+}
+
+# Check for develop and similarly named branches
+function git_develop_branch() {
+ command git rev-parse --git-dir &>/dev/null || return
+ local branch
+ for branch in dev devel develop development; do
+ if command git show-ref -q --verify refs/heads/$branch; then
+ echo $branch
+ return 0
+ fi
+ done
+
+ echo develop
+ return 1
+}
+
+# Check if main exists and use instead of master
+function git_main_branch() {
+ command git rev-parse --git-dir &>/dev/null || return
+ local ref
+ for ref in refs/{heads,remotes/{origin,upstream}}/{main,trunk,mainline,default,stable,master}; do
+ if command git show-ref -q --verify $ref; then
+ echo ${ref:t}
+ return 0
+ fi
+ done
+
+ # If no main branch was found, fall back to master but return error
+ echo master
+ return 1
+}
+
+function grename() {
+ if [[ -z "$1" || -z "$2" ]]; then
+ echo "Usage: $0 old_branch new_branch"
+ return 1
+ fi
+
+ # Rename branch locally
+ git branch -m "$1" "$2"
+ # Rename branch in origin remote
+ if git push origin :"$1"; then
+ git push --set-upstream origin "$2"
+ fi
+}
+
+#
+# Functions Work in Progress (WIP)
+# (sorted alphabetically by function name)
+# (order should follow README)
+#
+
+# Similar to `gunwip` but recursive "Unwips" all recent `--wip--` commits not just the last one
+function gunwipall() {
+ local _commit=$(git log --grep='--wip--' --invert-grep --max-count=1 --format=format:%H)
+
+ # Check if a commit without "--wip--" was found and it's not the same as HEAD
+ if [[ "$_commit" != "$(git rev-parse HEAD)" ]]; then
+ git reset $_commit || return 1
+ fi
+}
+
+# Warn if the current branch is a WIP
+function work_in_progress() {
+ command git -c log.showSignature=false log -n 1 2>/dev/null | grep -q -- "--wip--" && echo "WIP!!"
+}
+
+#
+# Aliases
+# (sorted alphabetically by command)
+# (order should follow README)
+# (in some cases force the alisas order to match README, like for example gke and gk)
+#
+
+alias grt='cd "$(git rev-parse --show-toplevel || echo .)"'
+
+function ggpnp() {
+ if [[ "$#" == 0 ]]; then
+ ggl && ggp
+ else
+ ggl "${*}" && ggp "${*}"
+ fi
+}
+compdef _git ggpnp=git-checkout
+
+alias ggpur='ggu'
+alias g='git'
+alias ga='git add'
+alias gaa='git add --all'
+alias gapa='git add --patch'
+alias gau='git add --update'
+alias gav='git add --verbose'
+alias gwip='git add -A; git rm $(git ls-files --deleted) 2> /dev/null; git commit --no-verify --no-gpg-sign --message "--wip-- [skip ci]"'
+alias gam='git am'
+alias gama='git am --abort'
+alias gamc='git am --continue'
+alias gamscp='git am --show-current-patch'
+alias gams='git am --skip'
+alias gap='git apply'
+alias gapt='git apply --3way'
+alias gbs='git bisect'
+alias gbsb='git bisect bad'
+alias gbsg='git bisect good'
+alias gbsn='git bisect new'
+alias gbso='git bisect old'
+alias gbsr='git bisect reset'
+alias gbss='git bisect start'
+alias gbl='git blame -w'
+alias gb='git branch'
+alias gba='git branch --all'
+alias gbd='git branch --delete'
+alias gbD='git branch --delete --force'
+
+function gbda() {
+ git branch --no-color --merged | command grep -vE "^([+*]|\s*($(git_main_branch)|$(git_develop_branch))\s*$)" | command xargs git branch --delete 2>/dev/null
+}
+
+# Copied and modified from James Roeder (jmaroeder) under MIT License
+# https://github.com/jmaroeder/plugin-git/blob/216723ef4f9e8dde399661c39c80bdf73f4076c4/functions/gbda.fish
+function gbds() {
+ local default_branch=$(git_main_branch)
+ (( ! $? )) || default_branch=$(git_develop_branch)
+
+ git for-each-ref refs/heads/ "--format=%(refname:short)" | \
+ while read branch; do
+ local merge_base=$(git merge-base $default_branch $branch)
+ if [[ $(git cherry $default_branch $(git commit-tree $(git rev-parse $branch\^{tree}) -p $merge_base -m _)) = -* ]]; then
+ git branch -D $branch
+ fi
+ done
+}
+
+alias gbgd='LANG=C git branch --no-color -vv | grep ": gone\]" | cut -c 3- | awk '"'"'{print $1}'"'"' | xargs git branch -d'
+alias gbgD='LANG=C git branch --no-color -vv | grep ": gone\]" | cut -c 3- | awk '"'"'{print $1}'"'"' | xargs git branch -D'
+alias gbm='git branch --move'
+alias gbnm='git branch --no-merged'
+alias gbr='git branch --remote'
+alias ggsup='git branch --set-upstream-to=origin/$(git_current_branch)'
+alias gbg='LANG=C git branch -vv | grep ": gone\]"'
+alias gco='git checkout'
+alias gcor='git checkout --recurse-submodules'
+alias gcb='git checkout -b'
+alias gcB='git checkout -B'
+alias gcd='git checkout $(git_develop_branch)'
+alias gcm='git checkout $(git_main_branch)'
+alias gcp='git cherry-pick'
+alias gcpa='git cherry-pick --abort'
+alias gcpc='git cherry-pick --continue'
+alias gclean='git clean --interactive -d'
+alias gcl='git clone --recurse-submodules'
+alias gclf='git clone --recursive --shallow-submodules --filter=blob:none --also-filter-submodules'
+
+function gccd() {
+ setopt localoptions extendedglob
+
+ # get repo URI from args based on valid formats: https://git-scm.com/docs/git-clone#URLS
+ local repo="${${@[(r)(ssh://*|git://*|ftp(s)#://*|http(s)#://*|*@*)(.git/#)#]}:-$_}"
+
+ # clone repository and exit if it fails
+ command git clone --recurse-submodules "$@" || return
+
+ # if last arg passed was a directory, that's where the repo was cloned
+ # otherwise parse the repo URI and use the last part as the directory
+ [[ -d "$_" ]] && cd "$_" || cd "${${repo:t}%.git/#}"
+}
+compdef _git gccd=git-clone
+
+alias gcam='git commit --all --message'
+alias gcas='git commit --all --signoff'
+alias gcasm='git commit --all --signoff --message'
+alias gcs='git commit --gpg-sign'
+alias gcss='git commit --gpg-sign --signoff'
+alias gcssm='git commit --gpg-sign --signoff --message'
+alias gcmsg='git commit --message'
+alias gcsm='git commit --signoff --message'
+alias gc='git commit --verbose'
+alias gca='git commit --verbose --all'
+alias gca!='git commit --verbose --all --amend'
+alias gcan!='git commit --verbose --all --no-edit --amend'
+alias gcans!='git commit --verbose --all --signoff --no-edit --amend'
+alias gcann!='git commit --verbose --all --date=now --no-edit --amend'
+alias gc!='git commit --verbose --amend'
+alias gcn='git commit --verbose --no-edit'
+alias gcn!='git commit --verbose --no-edit --amend'
+alias gcf='git config --list'
+alias gcfu='git commit --fixup'
+alias gdct='git describe --tags $(git rev-list --tags --max-count=1)'
+alias gd='git diff'
+alias gdca='git diff --cached'
+alias gdcw='git diff --cached --word-diff'
+alias gds='git diff --staged'
+alias gdw='git diff --word-diff'
+
+function gdv() { git diff -w "$@" | view - }
+compdef _git gdv=git-diff
+
+alias gdup='git diff @{upstream}'
+
+function gdnolock() {
+ git diff "$@" ":(exclude)package-lock.json" ":(exclude)*.lock"
+}
+compdef _git gdnolock=git-diff
+
+alias gdt='git diff-tree --no-commit-id --name-only -r'
+alias gf='git fetch'
+# --jobs=<n> was added in git 2.8
+is-at-least 2.8 "$git_version" \
+ && alias gfa='git fetch --all --tags --prune --jobs=10' \
+ || alias gfa='git fetch --all --tags --prune'
+alias gfo='git fetch origin'
+alias gg='git gui citool'
+alias gga='git gui citool --amend'
+alias ghh='git help'
+alias glgg='git log --graph'
+alias glgga='git log --graph --decorate --all'
+alias glgm='git log --graph --max-count=10'
+alias glods='git log --graph --pretty="%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ad) %C(bold blue)<%an>%Creset" --date=short'
+alias glod='git log --graph --pretty="%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ad) %C(bold blue)<%an>%Creset"'
+alias glola='git log --graph --pretty="%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset" --all'
+alias glols='git log --graph --pretty="%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset" --stat'
+alias glol='git log --graph --pretty="%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset"'
+alias glo='git log --oneline --decorate'
+alias glog='git log --oneline --decorate --graph'
+alias gloga='git log --oneline --decorate --graph --all'
+
+# Pretty log messages
+function _git_log_prettily(){
+ if ! [ -z $1 ]; then
+ git log --pretty=$1
+ fi
+}
+compdef _git _git_log_prettily=git-log
+
+alias glp='_git_log_prettily'
+alias glg='git log --stat'
+alias glgp='git log --stat --patch'
+alias gignored='git ls-files -v | grep "^[[:lower:]]"'
+alias gfg='git ls-files | grep'
+alias gm='git merge'
+alias gma='git merge --abort'
+alias gmc='git merge --continue'
+alias gms="git merge --squash"
+alias gmff="git merge --ff-only"
+alias gmom='git merge origin/$(git_main_branch)'
+alias gmum='git merge upstream/$(git_main_branch)'
+alias gmtl='git mergetool --no-prompt'
+alias gmtlvim='git mergetool --no-prompt --tool=vimdiff'
+
+alias gl='git pull'
+alias gpr='git pull --rebase'
+alias gprv='git pull --rebase -v'
+alias gpra='git pull --rebase --autostash'
+alias gprav='git pull --rebase --autostash -v'
+
+function ggu() {
+ [[ "$#" != 1 ]] && local b="$(git_current_branch)"
+ git pull --rebase origin "${b:=$1}"
+}
+compdef _git ggu=git-checkout
+
+alias gprom='git pull --rebase origin $(git_main_branch)'
+alias gpromi='git pull --rebase=interactive origin $(git_main_branch)'
+alias gprum='git pull --rebase upstream $(git_main_branch)'
+alias gprumi='git pull --rebase=interactive upstream $(git_main_branch)'
+alias ggpull='git pull origin "$(git_current_branch)"'
+
+function ggl() {
+ if [[ "$#" != 0 ]] && [[ "$#" != 1 ]]; then
+ git pull origin "${*}"
+ else
+ [[ "$#" == 0 ]] && local b="$(git_current_branch)"
+ git pull origin "${b:=$1}"
+ fi
+}
+compdef _git ggl=git-checkout
+
+alias gluc='git pull upstream $(git_current_branch)'
+alias glum='git pull upstream $(git_main_branch)'
+alias gp='git push'
+alias gpd='git push --dry-run'
+
+function ggf() {
+ [[ "$#" != 1 ]] && local b="$(git_current_branch)"
+ git push --force origin "${b:=$1}"
+}
+compdef _git ggf=git-checkout
+
+alias gpf!='git push --force'
+is-at-least 2.30 "$git_version" \
+ && alias gpf='git push --force-with-lease --force-if-includes' \
+ || alias gpf='git push --force-with-lease'
+
+function ggfl() {
+ [[ "$#" != 1 ]] && local b="$(git_current_branch)"
+ git push --force-with-lease origin "${b:=$1}"
+}
+compdef _git ggfl=git-checkout
+
+alias gpsup='git push --set-upstream origin $(git_current_branch)'
+is-at-least 2.30 "$git_version" \
+ && alias gpsupf='git push --set-upstream origin $(git_current_branch) --force-with-lease --force-if-includes' \
+ || alias gpsupf='git push --set-upstream origin $(git_current_branch) --force-with-lease'
+alias gpv='git push --verbose'
+alias gpoat='git push origin --all && git push origin --tags'
+alias gpod='git push origin --delete'
+alias ggpush='git push origin "$(git_current_branch)"'
+
+function ggp() {
+ if [[ "$#" != 0 ]] && [[ "$#" != 1 ]]; then
+ git push origin "${*}"
+ else
+ [[ "$#" == 0 ]] && local b="$(git_current_branch)"
+ git push origin "${b:=$1}"
+ fi
+}
+compdef _git ggp=git-checkout
+
+alias gpu='git push upstream'
+alias grb='git rebase'
+alias grba='git rebase --abort'
+alias grbc='git rebase --continue'
+alias grbi='git rebase --interactive'
+alias grbo='git rebase --onto'
+alias grbs='git rebase --skip'
+alias grbd='git rebase $(git_develop_branch)'
+alias grbm='git rebase $(git_main_branch)'
+alias grbom='git rebase origin/$(git_main_branch)'
+alias grbum='git rebase upstream/$(git_main_branch)'
+alias grf='git reflog'
+alias gr='git remote'
+alias grv='git remote --verbose'
+alias gra='git remote add'
+alias grrm='git remote remove'
+alias grmv='git remote rename'
+alias grset='git remote set-url'
+alias grup='git remote update'
+alias grh='git reset'
+alias gru='git reset --'
+alias grhh='git reset --hard'
+alias grhk='git reset --keep'
+alias grhs='git reset --soft'
+alias gpristine='git reset --hard && git clean --force -dfx'
+alias gwipe='git reset --hard && git clean --force -df'
+alias groh='git reset origin/$(git_current_branch) --hard'
+alias grs='git restore'
+alias grss='git restore --source'
+alias grst='git restore --staged'
+alias gunwip='git rev-list --max-count=1 --format="%s" HEAD | grep -q "\--wip--" && git reset HEAD~1'
+alias grev='git revert'
+alias greva='git revert --abort'
+alias grevc='git revert --continue'
+alias grm='git rm'
+alias grmc='git rm --cached'
+alias gcount='git shortlog --summary --numbered'
+alias gsh='git show'
+alias gsps='git show --pretty=short --show-signature'
+alias gstall='git stash --all'
+alias gstaa='git stash apply'
+alias gstc='git stash clear'
+alias gstd='git stash drop'
+alias gstl='git stash list'
+alias gstp='git stash pop'
+# use the default stash push on git 2.13 and newer
+is-at-least 2.13 "$git_version" \
+ && alias gsta='git stash push' \
+ || alias gsta='git stash save'
+alias gsts='git stash show --patch'
+alias gst='git status'
+alias gss='git status --short'
+alias gsb='git status --short --branch'
+alias gsi='git submodule init'
+alias gsu='git submodule update'
+alias gsd='git svn dcommit'
+alias git-svn-dcommit-push='git svn dcommit && git push github $(git_main_branch):svntrunk'
+alias gsr='git svn rebase'
+alias gsw='git switch'
+alias gswc='git switch --create'
+alias gswd='git switch $(git_develop_branch)'
+alias gswm='git switch $(git_main_branch)'
+alias gta='git tag --annotate'
+alias gts='git tag --sign'
+alias gtv='git tag | sort -V'
+alias gignore='git update-index --assume-unchanged'
+alias gunignore='git update-index --no-assume-unchanged'
+alias gwch='git whatchanged -p --abbrev-commit --pretty=medium'
+alias gwt='git worktree'
+alias gwta='git worktree add'
+alias gwtls='git worktree list'
+alias gwtmv='git worktree move'
+alias gwtrm='git worktree remove'
+alias gstu='gsta --include-untracked'
+alias gtl='gtl(){ git tag --sort=-v:refname -n --list "${1}*" }; noglob gtl'
+alias gk='\gitk --all --branches &!'
+alias gke='\gitk --all $(git log --walk-reflogs --pretty=%h) &!'
+
+unset git_version
+
+# Logic for adding warnings on deprecated aliases
+local old_alias new_alias
+for old_alias new_alias (
+ # TODO(2023-10-19): remove deprecated `git pull --rebase` aliases
+ gup gpr
+ gupv gprv
+ gupa gpra
+ gupav gprav
+ gupom gprom
+ gupomi gpromi
+); do
+ aliases[$old_alias]="
+ print -Pu2 \"%F{yellow}[oh-my-zsh] '%F{red}${old_alias}%F{yellow}' is a deprecated alias, using '%F{green}${new_alias}%F{yellow}' instead.%f\"
+ $new_alias"
+done
+unset old_alias new_alias