实用Git快捷命令
在我们使用Git作为版本管理的时候,可以将一些经常使用的操作命令或者命令组合通过别名的方式添加git alias或者shell alias以此来缩短输入,减少git command help的时间,提高开发效率。
添加别名的方式主要分为两种:
1、git alias
以Mac OS为例,在当前用户目录下的.gitconfig文件中添加alias模块,
[http]
cookiefile = /Users/xxx/.gitcookies
[color]
ui = auto
[user]
name = nitro hsu
[alias]
xxx = ...
在alias下添加对应的操作指令组合或者快捷操作指令,使用时键入:git xxx。
2、shell alias
以Mac OS的默认zsh为例,在当前用户目录下的.zshrc文件中添加对应alias命令或者函数,
alias grcd='cd $(git root)'
使用时终端键入:grcd
下面介绍几个经常使用的Git命令或者Git命令组合来提升我们的开发效率:
1、导航到当前Git仓库的根目录
这个命令在查看某些文件后想回到根目录时不用再通过cd一级级的返回或者记忆绝对目录位置,
// git alias
[alias]
root = rev-parse --show-toplevel
// shell alias
alias grcd='cd $(git root)'
2、设置远程跟踪分支
当我们在本地创建了分支以后如果需要推送到远程,大概率会直接调用git push推动到远程,此时如果没有设置本地分支与远程分支的对应关系,通常会出现如下报错:
fatal: The current branch master has no upstream branch.
To push the current branch and set the remote as upstream, use
git push --set-upstream origin master
我们需要执行上述提示的命令设置本地分支与远程分支的对应关系,此时可以使用如下命令组合,读取当前分支自动关联远程分支,
// git alias
[alias]
set-upstream = !git branch --set-upstream-to=origin/`git symbolic-ref --short HEAD`
symbolic-ref HEAD,读取当前分支,默认返回refs/head/master,如果添加--short参数,只返回master;
--set-upstream-to,设置跟踪的远程分支;
3、更直观的查看分支
通过定制分支输出格式,添加颜色配置,更直观。
// git alias
[alias]
branches = for-each-ref --sort=-committerdate --format=\"%(color:blue)%(authordate:relative)\t%(color:red)%(authorname)\t%(color:white)%(color:bold)%(refname:short)\" refs/remotes
for-each-ref,遍历所有分支
--sort=committerdate,以提交时间降序
refs/remotes,仅查看远程分支
refs/heads,仅查看本地分支
4、查看远程仓库文件的变化
有时我们需要追溯某个文件为什么被删除了、如何修改的、什么时候添加的,这些都可以通过log -diff-filter来处理。
// git alias
[alias]
whatadded = log --diff-filter=A
--diff-filter,A=添加,D=删除,M=修改,R=重命名,支持组合,比如AD,同时查看添加&删除
5、查看当前分支与目标分支的差异
// shell alias
gbc() {
git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset' --abbrev-commit --date=relative $@..$(git rev-parse --abbrev-ref HEAD)
}
gbbc() {
git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset' --abbrev-commit --date=relative $(git rev-parse --abbrev-ref HEAD)..$@
}
gbc,查看当前分支有但目标分支没有的差异;
gbbc,查看目标分支但当前分支没有的差异;
--pretty,输出格式
--date=relative,输出相对时间
$@,目标输入分支
--abbrev-ref,输出短的commit-hash
5、rebase当前分支
更新并rebase当前分支
// shell alias
gqrb() {
git set-upstream
git fetch origin "$@:$@" && git pull && git rebase "$@"
}
先fetch代码,然后pull代码,再做rebase。
参考资料: