首页 > 解决方案 > 分支分支合并时会发生什么

问题描述

我有一个在 Git Pro 书中找不到答案的问题。

假设我创建了branchAoff master,做了一些更改,提交并推送了 pull request。我很确定这个分支会origin/master在某个时候合并到,但我想根据提交的更改创建进一步的开发branchBbranchA

问题是什么branchB时候branchA会合并?

我的看法是,如果拉取请求批准者合并branchA,那么我的branchB拉取请求将已经包含来自的提交,branchA并且 diff 将有效地仅显示和之间branchA的更改branchB

但是,如果尚未合并,则拉取请求branchB将显示来自两个分支的更改,并且由批准者决定是否合并branchA,然后branchB或仅branchB.

请纠正我的推理

标签: gitgithub

解决方案


你有这种情况:

                       branch-A
                          v
              1---2---3---4
             /
O---O---O---O
            ^
          master

然后你这样做了:

                       branch-A       branch-B
                          v               v
              1---2---3---4---5---6---7---8
             /
O---O---O---O
            ^
          master

总结一下目前的状态:

  • A 到 master 的拉取请求将显示 A 和 master 之间的差异,这实际上是提交 1-4
  • B 到 master 的拉取请求将显示 B 和 master 之间的差异,这实际上是提交 1-8,因此包括 A 中尚未合并到 master 的所有更改

如果您现在决定完成对 A 的拉取请求,您会遇到以下情况:

                       branch-A       branch-B
                          v               v
              1---2---3---4---5---6---7---8
             /             \
O---O---O---O---------------X
                            ^
                          master

X 现在是合并提交。在此之后,没有其他更改或操作,如果您重新访问 B 的拉取请求,它现在应该(再次,仍然)显示 B 和 master 之间的差异,但现在它只包括提交 5-8。

相反,如果您首先完成了对 B 的拉取请求,那么您最终会得到以下结果:

                       branch-A       branch-B
                          v               v
              1---2---3---4---5---6---7---8
             /                             \
O---O---O---O-------------------------------Y
                                            ^
                                          master

如果您现在重新访问 A 的拉取请求,取决于工具,您会看到一个空的差异,或者拉取请求可以标记为已完成(我似乎记得 Bitbucket for Enterprise 使用这种方法),因为 A 中的所有更改都有已经成功合并。

所以总结一下:

TL;DR : 你的 B 分支并没有真正受到影响,但是它和 master 之间的差异最初也会包括来自 A 的所有更改,但是在完成 A 的 PR 后,它只会显示 B 和 master 之间的差异,并且不再显示显示来自 A 的更改,因为它们已被合并。因此,您关于“我的看法”的段落是正确的。


推荐阅读