在使用git时一般是有一个master和多条其他分支,master是十分稳定的版本,而其他分支继承了master后再添加新功能或者bug修复。当新功能完成或者bug修复后要与master合并,那么就有2种情况。
-
在你合并之前,没有其他人向master push,这种情况下用你在master 分支上使用git merge bugFix,合并是没有分支合并记录的,称之为Fast-forward 快滚 ,其实是HEAD指针向前指向bugFix
如下图所示
-
在你合并之前,已经有他人向master push,也就是master有改变,这个时候你用merge的话就会产生合并记录,而且由于远程的master在你本地master之前或者之后,而且这个合并冲突的解决是由master来处理,这样master还要去看bugFix的代码,这样不好。如下图。
但是如果用rebase 的话,相当于把自己当前分支提交隐藏起来,rebase把当前分支(bugFix)原来继承的master移动改成继承你现在本地的master,这就变成了第一种情况,这个时候合并是不会有分支合并记录的,而且是bugFix的作者自己解决代码冲突,而且时间轴也很清晰。