作者:Will_Liao
来源:juejin.cn/post/7001409038307033119
git merge 和 git rebase的区别
目的都是将一个分支的commit合并到到另外一个分支中去
git merge
1.在gitlab上新建一个项目,push一个test文件上去

文章插图
【合并代码还在用 git merge?我们都用 git rebase】2.在本地修改test文件做两次commit,每次commit都在文件中加一句修改

文章插图

文章插图

文章插图
3.在远程仓库中直接修改文件并commit,模拟其他开发者的commit

文章插图

文章插图
4.如果此时我push本地的提交到远程,就会被拒绝,因为远程和本地已经各自有commit了,我们常规的做法是git pull一下,在本地解决冲突,然后继续push,本质上git pull = git fetch + git merge
产生冲突:

文章插图

文章插图
处理冲突:

文章插图
重新走add commit 然后push,可以看到必须将合并当作一个新的commit:

文章插图
git rebase
如果我们此时采用git pull --rebase,也就是=git fetch + git rebase
1.一样本地commit2次,远程commit2次

文章插图

文章插图
2.使用可以看到git pull --rebase,还是会提示我们去处理冲突,但是从git log 上可以看出明显已经发生了rebase,也就是变基,本地分支基于了远程的最新commit,而不是上次的本地commit

文章插图

文章插图
3.处理冲突,每处理完一次本地commit冲突,用git add标记冲突已处理完,用git rebase --continue继续处理下一个本地commit,也可以先用git rebase -i将本地的commit合并为一个commit,这样git pull --rebase就能一次处理所有的冲突

文章插图
4.push到远程之后,在分支图可以明显看到,跟merge的区别在于,rebase不会产生分支,并且也不会产生新的提交

文章插图
总结
- merge 是一个合并操作,会将两个分支的修改合并在一起,默认操作的情况下会提交合并中修改的内容 。
- merge 的提交历史记录了实际发生过什么,关注点在真实的提交历史上面 。
- rebase 并没有进行合并操作,只是提取了当前分支的修改,将其复制在了目标分支的最新提交后面 。
- rebase 操作会丢弃当前分支已提交的 commit,故不要在已经 push 到远程,和其他人正在协作开发的分支上执行 rebase 操作 。
- merge 与 rebase 都是很好的分支合并命令,没有好坏之分,使用哪一个应由团队的实际开发需求及场景决定 。
- 如果比较关注commit时间的话,还是用git merge,rebase会打乱时间线是不可避免的 。
1.1,000+ 道 Java面试题及答案整理(2022最新版)
2.劲爆!Java 协程要来了 。。。
3.Spring Boot 2.x 教程,太全了!
4.20w 程序员红包封面,快快领取 。。。
5.《Java开发手册(嵩山版)》最新发布,速速下载!
觉得不错,别忘了随手点赞+转发哦!
- 春季老年人吃什么养肝?土豆、米饭换着吃
- 三八妇女节节日祝福分享 三八妇女节节日语录
- 老人谨慎!选好你的“第三只脚”
- 校方进行了深刻的反思 青岛一大学生坠亡校方整改校规
- 脸皮厚的人长寿!有这特征的老人最长寿
- 长寿秘诀:记住这10大妙招 100%增寿
- 春季老年人心血管病高发 3条保命要诀
- 眼睛花不花要看四十八 老年人怎样延缓老花眼
- 香槟然能防治老年痴呆症? 一天三杯它人到90不痴呆
- 老人手抖的原因 为什么老人手会抖
