|
@@ -1,177 +1,202 @@
|
|
|
|
+# Query/use custom command for `git`.
|
|
|
|
+local git_cmd
|
|
|
|
+zstyle -s ":vcs_info:git:*:-all-" "command" git_cmd
|
|
|
|
+: ${git_cmd:=git}
|
|
|
|
+
|
|
|
|
+#
|
|
|
|
+# Functions
|
|
|
|
+#
|
|
|
|
+
|
|
|
|
+# The current branch name
|
|
|
|
+# Usage example: git pull origin $(current_branch)
|
|
|
|
+# Using '--quiet' with 'symbolic-ref' will not cause a fatal error (128) if
|
|
|
|
+# it's not a symbolic ref, but in a Git repo.
|
|
|
|
+function current_branch() {
|
|
|
|
+ local ref
|
|
|
|
+ ref=$($git_cmd symbolic-ref --quiet HEAD 2> /dev/null)
|
|
|
|
+ local ret=$?
|
|
|
|
+ if [[ $ret != 0 ]]; then
|
|
|
|
+ [[ $ret == 128 ]] && return # no git repo.
|
|
|
|
+ ref=$($git_cmd rev-parse --short HEAD 2> /dev/null) || return
|
|
|
|
+ fi
|
|
|
|
+ echo ${ref#refs/heads/}
|
|
|
|
+}
|
|
|
|
+# The list of remotes
|
|
|
|
+function current_repository() {
|
|
|
|
+ if ! $git_cmd rev-parse --is-inside-work-tree &> /dev/null; then
|
|
|
|
+ return
|
|
|
|
+ fi
|
|
|
|
+ echo $($git_cmd remote -v | cut -d':' -f 2)
|
|
|
|
+}
|
|
|
|
+# Pretty log messages
|
|
|
|
+function _git_log_prettily(){
|
|
|
|
+ if ! [ -z $1 ]; then
|
|
|
|
+ git log --pretty=$1
|
|
|
|
+ fi
|
|
|
|
+}
|
|
|
|
+# Warn if the current branch is a WIP
|
|
|
|
+function work_in_progress() {
|
|
|
|
+ if $(git log -n 1 2>/dev/null | grep -q -c "\-\-wip\-\-"); then
|
|
|
|
+ echo "WIP!!"
|
|
|
|
+ fi
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+#
|
|
# Aliases
|
|
# Aliases
|
|
|
|
+# (sorted alphabetically)
|
|
|
|
+#
|
|
|
|
+
|
|
alias g='git'
|
|
alias g='git'
|
|
-compdef g=git
|
|
|
|
-alias gst='git status'
|
|
|
|
-compdef _git gst=git-status
|
|
|
|
-alias gd='git diff'
|
|
|
|
-compdef _git gd=git-diff
|
|
|
|
-alias gdc='git diff --cached'
|
|
|
|
-compdef _git gdc=git-diff
|
|
|
|
-alias gdt='git diff-tree --no-commit-id --name-only -r'
|
|
|
|
-compdef _git gdc=git diff-tree --no-commit-id --name-only -r
|
|
|
|
-alias gl='git pull'
|
|
|
|
-compdef _git gl=git-pull
|
|
|
|
-alias gup='git pull --rebase'
|
|
|
|
-compdef _git gup=git-fetch
|
|
|
|
-alias gp='git push'
|
|
|
|
-compdef _git gp=git-push
|
|
|
|
-alias gd='git diff'
|
|
|
|
-gdv() { git diff -w "$@" | view - }
|
|
|
|
-compdef _git gdv=git-diff
|
|
|
|
-alias gdt='git difftool'
|
|
|
|
|
|
+
|
|
|
|
+alias ga='git add'
|
|
|
|
+
|
|
|
|
+alias gb='git branch'
|
|
|
|
+alias gba='git branch -a'
|
|
|
|
+alias gbda='git branch --merged | command grep -vE "^(\*|\s*master\s*$)" | command xargs -n 1 git branch -d'
|
|
|
|
+alias gbl='git blame -b -w'
|
|
|
|
+alias gbnm='git branch --no-merged'
|
|
|
|
+alias gbr='git branch --remote'
|
|
|
|
+alias gbs='git bisect'
|
|
|
|
+alias gbsb='git bisect bad'
|
|
|
|
+alias gbsg='git bisect good'
|
|
|
|
+alias gbsr='git bisect reset'
|
|
|
|
+alias gbss='git bisect start'
|
|
|
|
+
|
|
alias gc='git commit -v'
|
|
alias gc='git commit -v'
|
|
-compdef _git gc=git-commit
|
|
|
|
alias gc!='git commit -v --amend'
|
|
alias gc!='git commit -v --amend'
|
|
-compdef _git gc!=git-commit
|
|
|
|
alias gca='git commit -v -a'
|
|
alias gca='git commit -v -a'
|
|
-compdef _git gc=git-commit
|
|
|
|
alias gca!='git commit -v -a --amend'
|
|
alias gca!='git commit -v -a --amend'
|
|
-compdef _git gca!=git-commit
|
|
|
|
|
|
+alias gcan!='git commit -v -a -s --no-edit --amend'
|
|
|
|
+alias gcb='git checkout -b'
|
|
|
|
+alias gcf='git config --list'
|
|
|
|
+alias gcl='git clone --recursive'
|
|
|
|
+alias gclean='git reset --hard && git clean -dfx'
|
|
|
|
+alias gcm='git checkout master'
|
|
alias gcmsg='git commit -m'
|
|
alias gcmsg='git commit -m'
|
|
-compdef _git gcmsg=git-commit
|
|
|
|
alias gco='git checkout'
|
|
alias gco='git checkout'
|
|
-compdef _git gco=git-checkout
|
|
|
|
-alias gcm='git checkout master'
|
|
|
|
-alias gr='git remote'
|
|
|
|
-compdef _git gr=git-remote
|
|
|
|
-alias grv='git remote -v'
|
|
|
|
-compdef _git grv=git-remote
|
|
|
|
-alias grmv='git remote rename'
|
|
|
|
-compdef _git grmv=git-remote
|
|
|
|
-alias grrm='git remote remove'
|
|
|
|
-compdef _git grrm=git-remote
|
|
|
|
-alias grset='git remote set-url'
|
|
|
|
-compdef _git grset=git-remote
|
|
|
|
-alias grup='git remote update'
|
|
|
|
-compdef _git grset=git-remote
|
|
|
|
-alias grbi='git rebase -i'
|
|
|
|
-compdef _git grbi=git-rebase
|
|
|
|
-alias grbc='git rebase --continue'
|
|
|
|
-compdef _git grbc=git-rebase
|
|
|
|
-alias grba='git rebase --abort'
|
|
|
|
-compdef _git grba=git-rebase
|
|
|
|
-alias gb='git branch'
|
|
|
|
-compdef _git gb=git-branch
|
|
|
|
-alias gba='git branch -a'
|
|
|
|
-compdef _git gba=git-branch
|
|
|
|
-alias gbr='git branch --remote'
|
|
|
|
alias gcount='git shortlog -sn'
|
|
alias gcount='git shortlog -sn'
|
|
compdef gcount=git
|
|
compdef gcount=git
|
|
-alias gcl='git config --list'
|
|
|
|
alias gcp='git cherry-pick'
|
|
alias gcp='git cherry-pick'
|
|
-compdef _git gcp=git-cherry-pick
|
|
|
|
-alias glg='git log --stat --max-count=10'
|
|
|
|
-compdef _git glg=git-log
|
|
|
|
-alias glgg='git log --graph --max-count=10'
|
|
|
|
-compdef _git glgg=git-log
|
|
|
|
-alias glgga='git log --graph --decorate --all'
|
|
|
|
-compdef _git glgga=git-log
|
|
|
|
-alias glo='git log --oneline --decorate --color'
|
|
|
|
-compdef _git glo=git-log
|
|
|
|
-alias glog='git log --oneline --decorate --color --graph'
|
|
|
|
-compdef _git glog=git-log
|
|
|
|
-alias gss='git status -s'
|
|
|
|
-compdef _git gss=git-status
|
|
|
|
-alias ga='git add'
|
|
|
|
-compdef _git ga=git-add
|
|
|
|
-alias gap='git add --patch'
|
|
|
|
-alias gaa='git add --all'
|
|
|
|
-alias gm='git merge'
|
|
|
|
-compdef _git gm=git-merge
|
|
|
|
-alias grh='git reset HEAD'
|
|
|
|
-alias grhh='git reset HEAD --hard'
|
|
|
|
-alias gclean='git reset --hard && git clean -dfx'
|
|
|
|
-alias gwc='git whatchanged -p --abbrev-commit --pretty=medium'
|
|
|
|
-
|
|
|
|
-# Sign and verify commits with GPG
|
|
|
|
alias gcs='git commit -S'
|
|
alias gcs='git commit -S'
|
|
-compdef _git gcs=git-commit
|
|
|
|
-alias gsps='git show --pretty=short --show-signature'
|
|
|
|
-compdef _git gsps=git-show
|
|
|
|
|
|
|
|
-# Sign and verify tags with GPG
|
|
|
|
-alias gts='git tag -s'
|
|
|
|
-compdef _git gts=git-tag
|
|
|
|
-alias gvt='git verify-tag'
|
|
|
|
-compdef _git gvt=git verify-tag
|
|
|
|
-
|
|
|
|
-#remove the gf alias
|
|
|
|
-#alias gf='git ls-files | grep'
|
|
|
|
|
|
+alias gd='git diff'
|
|
|
|
+alias gdc='git diff --cached'
|
|
|
|
+alias gdt='git diff-tree --no-commit-id --name-only -r'
|
|
|
|
+gdv() { git diff -w "$@" | view - }
|
|
|
|
+compdef _git gdv=git-diff
|
|
|
|
+alias gdw='git diff --word-diff'
|
|
|
|
|
|
-alias gpoat='git push origin --all && git push origin --tags'
|
|
|
|
-alias gmt='git mergetool --no-prompt'
|
|
|
|
-compdef _git gmt=git-mergetool
|
|
|
|
|
|
+alias gf='git fetch'
|
|
|
|
+alias gfa='git fetch --all --prune'
|
|
|
|
+function gfg() { git ls-files | grep $@ }
|
|
|
|
+compdef gfg=grep
|
|
|
|
+alias gfo='git fetch origin'
|
|
|
|
|
|
alias gg='git gui citool'
|
|
alias gg='git gui citool'
|
|
alias gga='git gui citool --amend'
|
|
alias gga='git gui citool --amend'
|
|
-alias gk='gitk --all --branches'
|
|
|
|
-
|
|
|
|
-alias gsts='git stash show --text'
|
|
|
|
-alias gsta='git stash'
|
|
|
|
-alias gstp='git stash pop'
|
|
|
|
-alias gstd='git stash drop'
|
|
|
|
-
|
|
|
|
-# Will cd into the top of the current repository
|
|
|
|
-# or submodule.
|
|
|
|
-alias grt='cd $(git rev-parse --show-toplevel || echo ".")'
|
|
|
|
|
|
+ggf() {
|
|
|
|
+[[ "$#" != 1 ]] && b="$(current_branch)"
|
|
|
|
+git push --force origin "${b:=$1}"
|
|
|
|
+}
|
|
|
|
+compdef _git ggf=git-checkout
|
|
|
|
+ggl() {
|
|
|
|
+[[ "$#" != 1 ]] && b="$(current_branch)"
|
|
|
|
+git pull origin "${b:=$1}"
|
|
|
|
+}
|
|
|
|
+compdef _git ggl=git-checkout
|
|
|
|
+ggp() {
|
|
|
|
+[[ "$#" != 1 ]] && b="$(current_branch)"
|
|
|
|
+git push origin "${b:=$1}"
|
|
|
|
+}
|
|
|
|
+compdef _git ggp=git-checkout
|
|
|
|
+ggpnp() {
|
|
|
|
+ggl "$1" && ggp "$1"
|
|
|
|
+}
|
|
|
|
+compdef _git ggpnp=git-checkout
|
|
|
|
+alias ggsup='git branch --set-upstream-to=origin/$(current_branch)'
|
|
|
|
+ggu() {
|
|
|
|
+[[ "$#" != 1 ]] && b="$(current_branch)"
|
|
|
|
+git pull --rebase origin "${b:=$1}"
|
|
|
|
+}
|
|
|
|
+compdef _git ggu=git-checkout
|
|
|
|
|
|
-# Git and svn mix
|
|
|
|
|
|
+alias gignore='git update-index --assume-unchanged'
|
|
|
|
+alias gignored='git ls-files -v | grep "^[[:lower:]]"'
|
|
alias git-svn-dcommit-push='git svn dcommit && git push github master:svntrunk'
|
|
alias git-svn-dcommit-push='git svn dcommit && git push github master:svntrunk'
|
|
compdef git-svn-dcommit-push=git
|
|
compdef git-svn-dcommit-push=git
|
|
|
|
|
|
-alias gsr='git svn rebase'
|
|
|
|
-alias gsd='git svn dcommit'
|
|
|
|
-#
|
|
|
|
-# Will return the current branch name
|
|
|
|
-# Usage example: git pull origin $(current_branch)
|
|
|
|
-#
|
|
|
|
-function current_branch() {
|
|
|
|
- ref=$(git symbolic-ref HEAD 2> /dev/null) || \
|
|
|
|
- ref=$(git rev-parse --short HEAD 2> /dev/null) || return
|
|
|
|
- echo ${ref#refs/heads/}
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-function current_repository() {
|
|
|
|
- ref=$(git symbolic-ref HEAD 2> /dev/null) || \
|
|
|
|
- ref=$(git rev-parse --short HEAD 2> /dev/null) || return
|
|
|
|
- echo $(git remote -v | cut -d':' -f 2)
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-# these aliases take advantage of the previous function
|
|
|
|
-alias ggpull='git pull origin $(current_branch)'
|
|
|
|
-compdef ggpull=git
|
|
|
|
-alias ggpur='git pull --rebase origin $(current_branch)'
|
|
|
|
-compdef ggpur=git
|
|
|
|
-alias ggpush='git push origin $(current_branch)'
|
|
|
|
-compdef ggpush=git
|
|
|
|
-alias ggpnp='git pull origin $(current_branch) && git push origin $(current_branch)'
|
|
|
|
-compdef ggpnp=git
|
|
|
|
|
|
+alias gk='\gitk --all --branches'
|
|
|
|
+compdef _git gk='gitk'
|
|
|
|
+alias gke='\gitk --all $(git log -g --pretty=format:%h)'
|
|
|
|
+compdef _git gke='gitk'
|
|
|
|
|
|
-# Pretty log messages
|
|
|
|
-function _git_log_prettily(){
|
|
|
|
- if ! [ -z $1 ]; then
|
|
|
|
- git log --pretty=$1
|
|
|
|
- fi
|
|
|
|
-}
|
|
|
|
|
|
+alias gl='git pull'
|
|
|
|
+alias glg='git log --stat --color'
|
|
|
|
+alias glgp='git log --stat --color -p'
|
|
|
|
+alias glgg='git log --graph --color'
|
|
|
|
+alias glgga='git log --graph --decorate --all'
|
|
|
|
+alias glgm='git log --graph --max-count=10'
|
|
|
|
+alias glo='git log --oneline --decorate --color'
|
|
|
|
+alias glol="git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
|
|
|
|
+alias glola="git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --all"
|
|
|
|
+alias glog='git log --oneline --decorate --color --graph'
|
|
alias glp="_git_log_prettily"
|
|
alias glp="_git_log_prettily"
|
|
compdef _git glp=git-log
|
|
compdef _git glp=git-log
|
|
|
|
|
|
-# Work In Progress (wip)
|
|
|
|
-# These features allow to pause a branch development and switch to another one (wip)
|
|
|
|
-# When you want to go back to work, just unwip it
|
|
|
|
-#
|
|
|
|
-# This function return a warning if the current branch is a wip
|
|
|
|
-function work_in_progress() {
|
|
|
|
- if $(git log -n 1 2>/dev/null | grep -q -c "\-\-wip\-\-"); then
|
|
|
|
- echo "WIP!!"
|
|
|
|
- fi
|
|
|
|
-}
|
|
|
|
-# these alias commit and uncomit wip branches
|
|
|
|
-alias gwip='git add -A; git ls-files --deleted -z | xargs -r0 git rm; git commit -m "--wip--"'
|
|
|
|
-alias gunwip='git log -n 1 | grep -q -c "\-\-wip\-\-" && git reset HEAD~1'
|
|
|
|
|
|
+alias gm='git merge'
|
|
|
|
+alias gmom='git merge origin/master'
|
|
|
|
+alias gmt='git mergetool --no-prompt'
|
|
|
|
+alias gmtvim='git mergetool --no-prompt --tool=vimdiff'
|
|
|
|
+alias gmum='git merge upstream/master'
|
|
|
|
+
|
|
|
|
+alias gp='git push'
|
|
|
|
+alias gpd='git push --dry-run'
|
|
|
|
+alias gpoat='git push origin --all && git push origin --tags'
|
|
|
|
+compdef _git gpoat=git-push
|
|
|
|
+alias gpu='git push upstream'
|
|
|
|
+alias gpv='git push -v'
|
|
|
|
+
|
|
|
|
+alias gr='git remote'
|
|
|
|
+alias gra='git remote add'
|
|
|
|
+alias grb='git rebase'
|
|
|
|
+alias grba='git rebase --abort'
|
|
|
|
+alias grbc='git rebase --continue'
|
|
|
|
+alias grbi='git rebase -i'
|
|
|
|
+alias grbm='git rebase master'
|
|
|
|
+alias grbs='git rebase --skip'
|
|
|
|
+alias grh='git reset HEAD'
|
|
|
|
+alias grhh='git reset HEAD --hard'
|
|
|
|
+alias grmv='git remote rename'
|
|
|
|
+alias grrm='git remote remove'
|
|
|
|
+alias grset='git remote set-url'
|
|
|
|
+alias grt='cd $(git rev-parse --show-toplevel || echo ".")'
|
|
|
|
+alias gru='git reset --'
|
|
|
|
+alias grup='git remote update'
|
|
|
|
+alias grv='git remote -v'
|
|
|
|
+
|
|
|
|
+alias gsb='git status -sb'
|
|
|
|
+alias gsd='git svn dcommit'
|
|
|
|
+alias gsi='git submodule init'
|
|
|
|
+alias gsps='git show --pretty=short --show-signature'
|
|
|
|
+alias gsr='git svn rebase'
|
|
|
|
+alias gss='git status -s'
|
|
|
|
+alias gst='git status'
|
|
|
|
+alias gsta='git stash'
|
|
|
|
+alias gstaa='git stash apply'
|
|
|
|
+alias gstd='git stash drop'
|
|
|
|
+alias gstl='git stash list'
|
|
|
|
+alias gstp='git stash pop'
|
|
|
|
+alias gsts='git stash show --text'
|
|
|
|
+alias gsu='git submodule update'
|
|
|
|
+
|
|
|
|
+alias gts='git tag -s'
|
|
|
|
|
|
-# these alias ignore changes to file
|
|
|
|
-alias gignore='git update-index --assume-unchanged'
|
|
|
|
alias gunignore='git update-index --no-assume-unchanged'
|
|
alias gunignore='git update-index --no-assume-unchanged'
|
|
-# list temporarily ignored files
|
|
|
|
-alias gignored='git ls-files -v | grep "^[[:lower:]]"'
|
|
|
|
|
|
+alias gunwip='git log -n 1 | grep -q -c "\-\-wip\-\-" && git reset HEAD~1'
|
|
|
|
+alias gup='git pull --rebase'
|
|
|
|
+alias gupv='git pull --rebase -v'
|
|
|
|
+
|
|
|
|
+alias gvt='git verify-tag'
|
|
|
|
+
|
|
|
|
+alias gwch='git whatchanged -p --abbrev-commit --pretty=medium'
|
|
|
|
+alias gwip='git add -A; git rm $(git ls-files --deleted); git commit -m "--wip--"'
|