bash 和 fish 中使用别名执行 git 常用命令

bash

编辑 ~/.bashrc ,添加以下代码:

git_current_branch() {
    echo $(git symbolic-ref --short -q HEAD)
}

alias g=git
alias ga='git add'
alias gaa='git add --all'
alias gapa='git add --patch'
alias gb='git branch'
alias gba='git branch -a'
alias gbd='git branch -d'
alias gbda='git branch --no-color --merged | command grep -vE "^(\*|\s*(master|develop|dev)\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 --amend'
alias gca='git commit -v -a'
alias 'gca!'='git commit -v -a --amend'
alias gcam='git commit -a -m'
alias 'gcan!'='git commit -v -a --no-edit --amend'
alias 'gcans!'='git commit -v -a -s --no-edit --amend'
alias gcb='git checkout -b'
alias gcd='git checkout develop'
alias gcf='git config --list'
alias gcl='git clone --recursive'
alias gclean='git clean -fd'
alias gcm='git checkout master'
alias gcmsg='git commit -m'
alias 'gcn!'='git commit -v --no-edit --amend'
alias gco='git checkout'
alias gcount='git shortlog -sn'
alias gcp='git cherry-pick'
alias gcpa='git cherry-pick --abort'
alias gcpc='git cherry-pick --continue'
alias gcs='git commit -S'
alias gd='git diff'
alias gdca='git diff --cached'
alias gdct='git describe --tags `git rev-list --tags --max-count=1`'
alias gdt='git diff-tree --no-commit-id --name-only -r'
alias gdw='git diff --word-diff'
alias gf='git fetch'
alias gfa='git fetch --all --prune'
alias gfo='git fetch origin'
alias gg='git gui citool'
alias gga='git gui citool --amend'
alias ggpull='git pull origin $(git_current_branch)'
alias ggpur=ggu
alias ggpush='git push origin $(git_current_branch)'
alias ggsup='git branch --set-upstream-to=origin/$(git_current_branch)'
alias ghh='git help'
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 gk='\gitk --all --branches'
alias gke='\gitk --all $(git log -g --pretty=%h)'
alias gl='git pull'
alias glg='git log --stat'
alias glgg='git log --graph'
alias glgga='git log --graph --decorate --all'
alias glgm='git log --graph --max-count=10'
alias glgp='git log --stat -p'
alias glo='git log --oneline --decorate'
alias globurl='noglob urlglobber '
alias glog='git log --oneline --decorate --graph'
alias gloga='git log --oneline --decorate --graph --all'
alias glol='git log --graph --pretty='\''%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'\'' --abbrev-commit'
alias glola='git log --graph --pretty='\''%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'\'' --abbrev-commit --all'
alias glp=_git_log_prettily
alias glum='git pull upstream master'
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'
alias gpristine='git reset --hard && git clean -dfx'
alias gpsup='git push --set-upstream origin $(git_current_branch)'
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 grep='grep  --color=auto --exclude-dir={.bzr,CVS,.git,.hg,.svn}'
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 save'
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'
alias gsts='git stash show --text'
alias gsu='git submodule update'
alias gts='git tag -s'
alias gtv='git tag | sort -V'
alias gunignore='git update-index --no-assume-unchanged'
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 gwch='git whatchanged -p --abbrev-commit --pretty=medium'
alias gwip='git add -A; git rm $(git ls-files --deleted) 2> /dev/null; git commit --no-verify -m "--wip--"'
alias l='ls -lah'

或者将以上代码保存在 ~/.git_alias, 然后在 ~/.bashrc 添加以下行:

. "$HOME/.git_alias"

fish

编辑 ~/.config/fish/config.fish ,添加以下代码:

function git_current_branch
    echo (git symbolic-ref --short -q HEAD)
end

abbr -a g git
abbr -a ga 'git add'
abbr -a gaa 'git add --all'
abbr -a gapa 'git add --patch'
abbr -a gb 'git branch'
abbr -a gba 'git branch -a'
abbr -a gbd 'git branch -d'
abbr -a gbda 'git branch --no-color --merged | command grep -vE "^(\*|\s*(master|develop|dev)\s*$)" | command xargs -n 1 git branch -d'
abbr -a gbl 'git blame -b -w'
abbr -a gbnm 'git branch --no-merged'
abbr -a gbr 'git branch --remote'
abbr -a gbs 'git bisect'
abbr -a gbsb 'git bisect bad'
abbr -a gbsg 'git bisect good'
abbr -a gbsr 'git bisect reset'
abbr -a gbss 'git bisect start'
abbr -a gc 'git commit -v'
abbr -a 'gc!' 'git commit -v --amend'
abbr -a gca 'git commit -v -a'
abbr -a 'gca!' 'git commit -v -a --amend'
abbr -a gcam 'git commit -a -m'
abbr -a 'gcan!' 'git commit -v -a --no-edit --amend'
abbr -a 'gcans!' 'git commit -v -a -s --no-edit --amend'
abbr -a gcb 'git checkout -b'
abbr -a gcd 'git checkout develop'
abbr -a gcf 'git config --list'
abbr -a gcl 'git clone --recursive'
abbr -a gclean 'git clean -fd'
abbr -a gcm 'git checkout master'
abbr -a gcmsg 'git commit -m'
abbr -a 'gcn!' 'git commit -v --no-edit --amend'
abbr -a gco 'git checkout'
abbr -a gcount 'git shortlog -sn'
abbr -a gcp 'git cherry-pick'
abbr -a gcpa 'git cherry-pick --abort'
abbr -a gcpc 'git cherry-pick --continue'
abbr -a gcs 'git commit -S'
abbr -a gd 'git diff'
abbr -a gdca 'git diff --cached'
abbr -a gdct 'git describe --tags `git rev-list --tags --max-count=1`'
abbr -a gdt 'git diff-tree --no-commit-id --name-only -r'
abbr -a gdw 'git diff --word-diff'
abbr -a gf 'git fetch'
abbr -a gfa 'git fetch --all --prune'
abbr -a gfo 'git fetch origin'
abbr -a gg 'git gui citool'
abbr -a gga 'git gui citool --amend'
abbr -a ggpull 'git pull origin (git_current_branch)'
abbr -a ggpur ggu
abbr -a ggpush 'git push origin (git_current_branch)'
abbr -a ggsup 'git branch --set-upstream-to=origin/(git_current_branch)'
abbr -a ghh 'git help'
abbr -a gignore 'git update-index --assume-unchanged'
abbr -a gignored 'git ls-files -v | grep "^[[:lower:]]"'
abbr -a git-svn-dcommit-push 'git svn dcommit && git push github master:svntrunk'
abbr -a gk '\gitk --all --branches'
abbr -a gke '\gitk --all (git log -g --pretty=%h)'
abbr -a gl 'git pull'
abbr -a glg 'git log --stat'
abbr -a glgg 'git log --graph'
abbr -a glgga 'git log --graph --decorate --all'
abbr -a glgm 'git log --graph --max-count=10'
abbr -a glgp 'git log --stat -p'
abbr -a glo 'git log --oneline --decorate'
abbr -a globurl 'noglob urlglobber '
abbr -a glog 'git log --oneline --decorate --graph'
abbr -a gloga 'git log --oneline --decorate --graph --all'
abbr -a glol 'git log --graph --pretty='\''%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'\'' --abbrev-commit'
abbr -a glola 'git log --graph --pretty='\''%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'\'' --abbrev-commit --all'
abbr -a glp _git_log_prettily
abbr -a glum 'git pull upstream master'
abbr -a gm 'git merge'
abbr -a gmom 'git merge origin/master'
abbr -a gmt 'git mergetool --no-prompt'
abbr -a gmtvim 'git mergetool --no-prompt --tool=vimdiff'
abbr -a gmum 'git merge upstream/master'
abbr -a gp 'git push'
abbr -a gpd 'git push --dry-run'
abbr -a gpoat 'git push origin --all && git push origin --tags'
abbr -a gpristine 'git reset --hard && git clean -dfx'
abbr -a gpsup 'git push --set-upstream origin (git_current_branch)'
abbr -a gpu 'git push upstream'
abbr -a gpv 'git push -v'
abbr -a gr 'git remote'
abbr -a gra 'git remote add'
abbr -a grb 'git rebase'
abbr -a grba 'git rebase --abort'
abbr -a grbc 'git rebase --continue'
abbr -a grbi 'git rebase -i'
abbr -a grbm 'git rebase master'
abbr -a grbs 'git rebase --skip'
abbr -a grep 'grep  --color=auto --exclude-dir={.bzr,CVS,.git,.hg,.svn}'
abbr -a grh 'git reset HEAD'
abbr -a grhh 'git reset HEAD --hard'
abbr -a grmv 'git remote rename'
abbr -a grrm 'git remote remove'
abbr -a grset 'git remote set-url'
abbr -a grt 'cd (git rev-parse --show-toplevel || echo ".")'
abbr -a gru 'git reset --'
abbr -a grup 'git remote update'
abbr -a grv 'git remote -v'
abbr -a gsb 'git status -sb'
abbr -a gsd 'git svn dcommit'
abbr -a gsi 'git submodule init'
abbr -a gsps 'git show --pretty=short --show-signature'
abbr -a gsr 'git svn rebase'
abbr -a gss 'git status -s'
abbr -a gst 'git status'
abbr -a gsta 'git stash save'
abbr -a gstaa 'git stash apply'
abbr -a gstc 'git stash clear'
abbr -a gstd 'git stash drop'
abbr -a gstl 'git stash list'
abbr -a gstp 'git stash pop'
abbr -a gsts 'git stash show --text'
abbr -a gsu 'git submodule update'
abbr -a gts 'git tag -s'
abbr -a gtv 'git tag | sort -V'
abbr -a gunignore 'git update-index --no-assume-unchanged'
abbr -a gunwip 'git log -n 1 | grep -q -c "\-\-wip\-\-" && git reset HEAD~1'
abbr -a gup 'git pull --rebase'
abbr -a gupv 'git pull --rebase -v'
abbr -a gwch 'git whatchanged -p --abbrev-commit --pretty=medium'
abbr -a gwip 'git add -A; git rm (git ls-files --deleted) 2> /dev/null; git commit --no-verify -m "--wip--"'
abbr -a l 'ls -lah'