前言
在使用git
进行版本管理的项目中,当完成一个特性的开发并将其合并到master
分支时,我们有两种方式:git merge
和 git rebase
。通常,我们对git merge
使用的较多,而对于git rebase
使用的较少。下面我们就来讲一讲git merge
和git rebase
的差别和在实际中的使用。
git pull
git pull
是git fetch
+ git merge FETCH_HEAD
的缩写。所以,默认情况下,git pull
就是先fetch
,然后执行merge
操作,如果加--rebase
参数,就是使用git rebase
代替git merge
。
merge 和 rebase
merge
是合并的意思,rebase
是复位基底的意思。
现在我们有这样的两个分支,test
和master
,提交如下:
1 | D---E test |
在master
执行git merge test
,然后会得到如下结果:
1 | D--------E |
在master
执行git rebase test
,然后得到如下结果:
1 | A---B---D---E---C'---F' test, master |
可以看到,merge操作会生成一个新的节点,之前的提交分开显示。而rebase操作不会生成新的节点,是将两个分支融合成一个线性的提交。
其他内容放这里
通过上面可以看到,想要更好的提交树,使用rebase
操作会更好一点。这样可以线性的看到每一次提交,并且没有增加提交节点。
在我们操作过程中。merge
操作遇到冲突的时候,当前merge
不能继续进行下去。手动修改冲突内容后,add
修改,commit
就可以了。
而rebase
操作的话,会中断rebase
,同时会提示去解决冲突。解决冲突后,将修改add
后执行git rebase –continue
继续操作,或者git rebase –skip
忽略冲突。