合并代码还在用git merge吗?我们都用git rebase!

欢迎关注方志朋的博客,回复”666“获面试宝典

git merge 和 git rebase的区别

目的都是将一个分支的 commit 合并到到另外一个分支中去。

git merge

在gitlab上新建一个项目,push一个test文件上去

48a91d37915d71c0bc21708abd5e49a7.png

在本地修改test文件做两次commit,每次commit都在文件中加一句修改

ddadc0f02bfadadf563efb66b2ad2981.png

4be23f9339d6d141c1511214f1093d64.png

c1442d81044d031c81f57942ca936777.png

在远程仓库中直接修改文件并 commit,模拟其他开发者的 commit。

c34137593378c69da605a82c63a7c904.png d80f08dfed78c431e66497be5fc5bc2a.png

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

产生冲突:

7ed30ad67a455b927d96f99f319137b2.png

086a49ef3b9cf6a7f7e13a8919593007.png

处理冲突:

a24cfd4178c4393adc28b3d3525cb0f7.png

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

3c4e6bcca17d26bb29a47b7f5ec76c01.png

git rebase

如果我们此时采用git pull --rebase,也就是=git fetch + git rebase

一样本地commit2次,远程commit2次

f72a82f5c54f5c271c0d0a7b143dcd49.png

8c592e2893d960ce9bd785e58ab88e80.png

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

8873d58973a9a2403d23fd013f574784.png

9bc32171d51075c79c6108b57ca99e67.png

git rebase

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

e8f542f191f02b294292bbdc33b7e710.png

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

总结

  • merge 是一个合并操作,会将两个分支的修改合并在一起,默认操作的情况下会提交合并中修改的内容。

  • merge 的提交历史记录了实际发生过什么,关注点在真实的提交历史上面。

  • rebase 并没有进行合并操作,只是提取了当前分支的修改,将其复制在了目标分支的最新提交后面。

  • rebase 操作会丢弃当前分支已提交的 commit,故不要在已经 push 到远程,和其他人正在协作开发的分支上执行 rebase 操作。

  • merge 与 rebase 都是很好的分支合并命令,没有好坏之分,使用哪一个应由团队的实际开发需求及场景决定。

  • 如果比较关注commit时间的话,还是用git merge,rebase会打乱时间线是不可避免的。

来源 | https://juejin.cn/post/7001409038307033119

 
 
热门内容:

eba55e8529193978894b97ad41903f54.png

 
 
最近面试BAT,整理一份面试资料《Java面试BAT通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。
获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。

明天见(。・ω・。)ノ♡

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值