git merge 与 rebase

git中做跨分支的功能合并时常用到两个命令:mergerebase

merge

将A分支的修改合并到B分支;

  1. 基于A分支最新Commit与B分支最新Commi生成新Commit,head移动到新的commit
  2. 从两个分支的最近公共节点开始到新生成的Commit之间进行diff,如果有冲突,则手动解决随着最新commit提交
  3. merge后,A分支的commit和B分支的commit的hash不变
  4. merge后,如果用git log命令查看,两个分支的commit会以各自提交的时间顺序排序

rebase

改变A分支的基线到B分支的head位置,从而合入B分支的最新修改:

  1. 找到A分支与B分支的最近公共节点
  2. 将A分支的提交与B支公共节点后的所有提价逐个比较,直到移动到B的head
  3. 如果比较过程中遇到冲突,需要手动解决
  4. 基线修改后,A分支所有的Commit的Hash会变化
  5. rebase后,如果用git log命令查看,A分支的提交会接在B分支之后,不保证时间上的排序

举例

基于mater开了一个login分支并在上面进行登录功能开发。其他开发者更新了master的内容后,需要将master的内容合并入我的login分支
在这里插入图片描述
如上图,需要将master的E、F 合并入login。

如果使用merge,则会在login生成M节点,并将head执行M,M有两个parent分别是F和D
在这里插入图片描述

如果使用rebase,则从B开始,将C和D应用(逐个比较)到master的最后
在这里插入图片描述
注意,移动后的C、D与原来的C、D的hash不同,C的parent从B变为F。


最后


当需要进行跨分支功能合并时,推荐首先rebase。merge不行改变原来所有commit的parent关系,所以只好生成一个额外节点用来更新head的位置,这样会形成一个环形的提交记录。而rebase做了变基,所以可以保持直线的提交记录,这样的提交记录更容易维护。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fundroid

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值