Git是一个非常强大的版本控制系统,但是Git异于常规以文件为基础的VCS系统架构,以及基于纯命令行的功能涉及,使得初学者会难勘其妙,产生畏惧心里。而如果长期依赖于Git图形端的话,也难以真正理解Git的真正思维和功能。关于Git,虫虫已经发了很多文章,关注虫虫可以学习。今天虫虫就总结几个可以极大改善你工作效率的Git技巧,希望能够抛砖引玉,能对你Git学习和使用有一定的帮助。
Git别名
Git有很多命令,第一难于记忆。第二就算记得或者使用Git自动补全功能,但是敲打命令也比较费劲,影响效率。熟悉Linux的同学都应该使用过Shell强大的别名功能,帮你记忆和减少敲打命令的痛苦。同样的该技巧也可以用到Git命令中来,可以对每天频繁使用的命令创建别名,来帮我们提高效率。
例如,下面我们对最长使用的命令checkout,commit和branch创建别名(ck,cm,bc,也可为其他你喜欢的字符):
git config --global alias.ck checkout
git config --global alias.cm commit
git config --global alias.bc branch
此后,你只需键入git ck master,代替 git checkout master。
除了,通过上面命令设置全局命令设置别名外,也支持通过直接修改用户配置文件~/.gitconfig文件来达到同样的效果:
[alias]
ck = checkout
cm = commit
bc = branch
暂储未提交的更改
我们说git版本设计时候极大地考虑到了保存你使用状态,设计了三个区域来区分不同阶段的变化,从变化由新到久顺序依次是用户工作区(working directory),暂存区(stage index)和历史记录区(history),在远程库以及和其他客户端交互协作都是commit后git对象(git文件数据库);
对应三个区域的,git中的文件有四种状态,未跟踪(Untracked),未修改,(Unmodified),已修改(Modified),已暂存 (Staged)。而最后通过commit进入历史记录区后,就没有文件了,都是git对象了,所以开头我们说了Git不是以文件为基础的。只是在客户端体现为文件(工作区和暂存区)。
对于已经commit的git对象,可以任意交换、追踪和撤回,那么对本地工作区和暂存区文件由于还没有commit无法通过git追踪和保存。git也考虑这种需求,那就是我们要介绍第二个技巧stash功能,估计很多码农一直在用。试想我们正在持续开发中,写大了大量的功能,但是还没有做单元测试,还不宜于提交commit。这是来了个紧急bug需要立即处理。这时候就是stach大显伸手的时候了。
git stash
git stash会保存了目前文件变化状态,回归到上一个commit后的干净的工作目录。现在我们可以随意切换到bug分支来进行修复问题。
修复完成后,希望再次显示以前的工作状态,只需运行下面命令:
git stash pop
这样之前工作状态就恢复了。你可以保存多个stash工作状态,通过list显示其列表,也可以通过git stash drop如清除暂存的工作状态。
commit对比
比较commit或同一文件版本之间差异的简单快捷方法是使用命令行。可以使用git diff命令。
如果要在不同commit(commit1和commitN)对比一个文件的变化,命令是:
git diff commit1..commitN -- path/to/file
如果你想比较两次commit之间的差异:
git diff commit1..commitN
该命令将打开终端的diff视图,但如果你喜欢使用更直观的工具来比较差异,则可以使用git difftool。比如使用Meld编辑器。
首先配置difftoll配置,指向Meld:
git config --global diff.tool git-meld
文件对比差异:
git difftool commit1..commitN -- path/to/file
和总体差异
git difftool commit1..commitN
Reset重置文件
有时候,你修改了文件后,发现修改的多余了,想反悔,在git中反悔很容易你只需要reset即可。可以将所有文件重置为分支的HEAD,不需要在编辑的内容上单击撤销:
git reset --hard HEAD
或者,撤销单个文件文件,可以用:
git checkout HEAD -- path/to/file
如果已经提commit了变化,但仍希望还原,可以使用:
git reset --soft HEAD~1
使用Git blame提高效率
Git blame是个非常有用工具,可是很多人还没有用到,那就开始使用把。blame操作,可以帮我们追踪,某个文件中所有内容的变化历史。blame有很多有用的参数可以提高我们查询的效率:
git blame -w #忽略空格
git blame -M #忽略挪移了的内容
git blame -C #忽略挪移到其他文件中的内容
上面是一些git功能的使用技巧,虫虫在介绍几个git工作流程方面的技巧,可供参考。
随用随pull
在Git工作流中,根据功能实现的时间长短,可能会对主分支进行了大量变化。为了避免发生较大的冲突,建议经常从主分支pull变化,这样可以减少由于变化过大导致合并困难。
经常push,但不要每个commit都push
根据需要,通常会提交更改,使得变化历史更简洁,使其更容易还原。但是不建议并且没必要将每个提交push到远程仓,因为每一次push都会出现在action中,并且可能会向其他人发送邮件通知。协调好你的commit和push是个成熟码农应该具有的技能。一般建议按照做完一个完整(单元测试通过)功能点来push你的变化。