zsh 下 git 别名(alias) 和 oh-my-zsh git 插件

来源:互联网 发布:c语言 while break 编辑:程序博客网 时间:2024/06/06 04:05

学习 git 的过程中,想给一些 git 命令设置一些别名,这样也可以提高一下效率。

因为用的是 zsh ,就在 ~/.zshrc

alias gst='git status'alias gcm='git commit -m 'alias gps='git push'alias glg='git log --graph'

结果在执行 gcm 的时候,运行不正确。用 alias gcm 查看该别名设置:

➜  ~ alias gcmgcm='git checkout master'

原来配置成了其他命令。
但是奇怪的是,在 .zshrc 文件中并没有找到相关配置。经过仔细阅读,最终发现了下面这条语句:

# Which plugins would you like to load? (plugins can be found in ~/.oh-my-zsh/plugins/*)# Custom plugins may be added to ~/.oh-my-zsh/custom/plugins/# Example format: plugins=(rails git textmate ruby lighthouse)# Add wisely, as too many plugins slow down shell startup.plugins=(git)

原来我的 zsh 安装了 oh-my-zsh,不知道是我自己安装还是默认自带了一个 git 插件,那我们按照注释说明,到那个插件下看一下吧。

cd ~/.oh-my-zsh/plugins/gitlsREADME.md      git.plugin.zsh

可以看到一个 git.plugin.zsh 文件,vi 打开,看到一些 functions 和 N 多的 alias。
具体文件内容我就懒得贴出来了,如果你有兴趣,终端下执行一下 alias 就列出所有可用别名,比看那个 git.plugin.zsh 文件更清楚明了 。
大致如下:

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

即便你没有安装 zsh 和 oh-my-zsh,个人觉得这些别名的设置还是可以借鉴一下的。

最后说一句:不同的 shell ,alias 配置文件是不同的,你执行 alias 显示的也会不同。比如 Mac 默认的 bash,其配置文件可能是 /etc/bashrc、~/bash_profile 或者 /etc/profile。而 zsh 默认是 ~/.zshrc.

另外,用命令 alias 设置的别名为临时别名,shell 重启后就会失效。如: alias la="ls -al" 。如果你重启了还有效,那可能能在上述配置文件中找到。^_^

原创粉丝点击