git高级浅入之rebase与merge差异
目录
-
rebase的几个操作
-
rebase与merge的比较和实际操作
-
结合动图加深理解rebase
1.rebase的几个操作
- git rebase [分支名]
- git rebase --continue 继续rebase
- git rebase --abort 放弃本次rebase
2.rebase与merge的比较和实际操作
相比较于git merge,我们在初级篇已经学习过merge操作,每次使用merge合并分支时候,会将两个分支又合到一条分支上,这样造成的问题就是在一个git分支树上好多交叉,如果你希望commit的时候不要出现分支,可以使用rebase替代
我们新建一个git项目,然后创建一个空的test.js文件并commit,这时候的分支图是这样的
接下来我们在master分支修改test.js文件并commit,然后创建一个分支branch1,并在branch1上修改test.js文件,并提交。然后我们看下分支图
如果这时候我们在master分支合并branch1的话
git checkout master
git merge branch1
打叉了!打叉了!打叉了!
ok,我们回退到上一个版本,回退后分支是这样的
试下使用rebase的效果,进行如下操作
git checkout branch1
git rebase master
报了个错,说rebase的时候有冲突,那么我们vim test.js冲突的地方修复,然后执行下面
git add .
git rebase --continue // 继续rebase (同时普及一下另外一个git rebase --abort 放弃本次rebase)
这个时候分支是这样的:
然后我们回到master,去merge branch1(这样的目的是因为能从上图看到,master所指向的位置靠后了,要将其更新到最前面)
git checkout master
git merge branch1
3.结合动图加深理解rebase
git merge branch1
git checkout branch1
git rebase master
git checkout master
git merge branch1
为什么需要再branch1上rebase而不是在master上直接rebase?看下图
总结
其实就从字面意思来理解在branch1上git rebase master就是说把branch1的基准重新定位到master分支指向的最新一次commit处,