感谢内容提供者:金牛区吴迪软件开发工作室
文章目录
- 三、总结
一、单词意思
merge 是合并的意思
rebase 是复位基底的意思。
二、俩者的不同
merge操作会生成一个新的节点,之前的提交分开显示。
而rebase操作不会生成新的节点,是将两个分支融合成一个线性的提交。
例子:
你刚创建了dev分支来开发新功能,但你同事又在master上有了新的提交。这时候分支变成以下:
1、merge
$ git checkout dev
$ git merge master
2、rebase
$ git checkout dev
$ git rebase master
rebase会把整个 feature 分支移动到 master 分支的后面,有效地把所有 master 分支上新的提交并入过来。但是,rebase 为原分支上每一个提交创建一个新的提交,重写了项目历史,并且不会带来合并提交。
3、注意
但最好不要在master上rebase到你的分支。因为这个时候。Master上所有提交都移到了分支后面。问题是它值发生在了你的代码仓库中,其他人还是在原来的master上工作。因为rebase引起了新的提交,Git会认为你的master和别人的master已经分叉了。同步两个 master 分支的唯一办法是把它们 merge 到一起,导致一个额外的合并提交和两堆包含同样更改的提交。不用说,这会让人非常困惑。如下图:
三、总结
通过以上可以看到,要是想要干净的、线性的提交树,使用rebase操作会好一点,这样可以在一条线上看到每一次提交,并且没有增加提交节点。但是如果你想要保存项目完整的历史,并且避免重写公共分支上的 commit,就用merge。
但在操作上,merge产生冲突的时候,手动解决好冲突内容后,正常add和commit就可以了,只需要解决一遍冲突,比较简单粗暴。但是rebase的话,会中断rebase,同时提示去解决冲突,冲突解决后执行git rebase –continue继续操作,或者git rebase –skip忽略冲突,操作上有时会需要多次fix冲突。