git 分支合并 3 way merge

一、

  • 如下图,master 分支的最近一次 commit 是 C2,此时我们创建一个新分支:bugfix,bugfix 分支的最近一次 commit 是 C3。
  • 此时,这便是所谓的 fast-forward 合并;只需要切换到 master 分支,然后在 master 分支执行命令 git merge bugfix 即可。
    在这里插入图片描述
  • 如下图,如果此时 master 分支指向的 commit 变化了,指向了 commit:C4,此时 bugfix 分支与 master 分支就不属于 “fast-forward”合并的情况了,而是所谓的“3 way merge”。
  • 此时如果在 master 分支上执行命令 git merge bugfix 会发生什么情况呢?
    在这里插入图片描述

二、演示

  • 首先在 master 分支上,提交一个文件 test.txt。

在这里插入图片描述

  • 切换到 bugfix 分支,修改文件 test.txt。

在这里插入图片描述

  • 再切换回 master 分支,也是对同一个文件 test.txt 做修改。

  • 此时,在 master 分支上可见的两个 commit 分别是 1st 和 3rd。

在这里插入图片描述

  • 再切换回 bugfix 分支,bugfix 分支的 commit 分别是 1st 和 2nd。

在这里插入图片描述

  • 在“ 3 way merge”状态下,由于多个分支修改了同一个文件,所以 merge 合并需要解决冲突。

在这里插入图片描述

  • 此时在查看暂存区,可以看到三个不同的 test.txt 文件。
  • 可以看到,这三个文件分别对应合并前的原始内容,以及 master 分支和 bugfix 分支分别修改的内容。
  • 最后我们通过 vim 修改文件内容,将 master 分支和 bugfix 分支的修改全都采纳。

在这里插入图片描述

  • 解决冲突之后,还需要执行一次 commit 提交,将我们解决冲突的方案提交到 git 版本库。

在这里插入图片描述

  • 分支合并后的commit,它会有两个 parent。
  • 一个 parent 指向 bugfix 分支最近的一次 commit。
  • 一个 parent 指向 master 分支合并之前的最近一次 commit。

在这里插入图片描述


三、如果没有发生合并冲突

  • 如果合并的时候,没有发生修改同一个文件导致的“合并冲突”,git 就会自动帮我们将这次合并 commit 到 git 版本库中,无需做其他操作。
  • 可以看到,并没有出现上面第二段所谓的 “master | MERGING”状态。

在这里插入图片描述

  • 合并操作后,依然是最新的 commit 存在着两个 parent 提交。

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值