Git相对于CVS和SVN的一大好处就是merge非常方便,只要指出branch的名字就好了,如:
$ git merge another $ git checkout another # modify, commit, modify, commit ... $ git checkout master $ git merge another
但是,操作方便并不意味着这样操作就是合理的,在某些情况下,我们应该优先选择使用--squash
选项,如下:
$ git merge --squash another $ git commit -m "message here"
--squash
选项的含义是:本地文件内容与不使用该选项的合并结果相同,但是不提交、不移动HEAD
,因此需要一条额外的commit
命令。其效果相当于将another分支上的多个commit
合并成一个,放在当前分支上,原来的commit
历史则没有拿过来。
判断是否使用--squash
选项最根本的标准是,待合并分支上的历史是否有意义。
如果在开发分支上提交非常随意,甚至写成微博体,那么一定要使用--squash
选项。版本历史记录的应该是代码的发展,而不是开发者在编码时的活动。
只有在开发分支上每个commit
都有其独自存在的意义,并且能够编译通过的情况下(能够通过测试就更完美了),才应该选择缺省的合并方式来保留commit
历史。
原来你2010年就发了这篇
今天才清楚的了解到这招
很有启发的一篇文章,不限于使用 squash 的具体知识。
“版本历史记录的应该是代码的发展,而不是开发者在编码时的活动。”
请问如何区分好两者呢,能否举一两个例子