解决功能分支上的合并冲突不适用于所有主分支



我有三个master分支

  • master
  • master-alpha
  • master-beta

所有这些分支都有100提交,并且是This branch is even with master

我有三个"特色"分支。

  • feature-brooklyn(masterfeature-brooklyn)
  • feature-staten-island(masterfeature-brooklynfeature-staten-island)
  • feature-manhattan(masterfeature-manhattan)

每个都是master的分支,feature-staten-islandmaster进行了根本性的更改,因此它已经与feature-brooklyn合并。

这是设置。

  1. 我做了一个PR,将feature-brooklyn添加到master-beta中。没有任何问题
  2. 我做了一个PR,将feature-staten-island添加到master-beta中,存在合并冲突。所以我将master-beta合并到feature-staten-island中,然后将更新推送到feature-staten-island

这很有效,我可以合并。

我发现的问题是:

  1. 我现在做一个PR,将feature-brooklyn添加到master-alpha中。工作
  2. 我做了一个PR,将feature-staten-island添加到master-alpha,但仍然存在合并冲突

为什么当我解决功能分支与另一个分支的合并冲突,然后更新功能分支时,当我在另一个代码完全相同的分支上合并时,它仍然存在冲突?

我的目标是拥有三个干净的功能分支,它们可以很容易地合并到三个主分支中。我不明白为什么一旦我为其中一个主分支修复了合并冲突,为什么当我尝试将其合并到另一个主支路时仍然存在冲突。

当您解决master-betafeature-staten-island之间的冲突时,您可能选择将代码保留在feature-staten-island上。

这意味着CCD_ 35和CCD_ 36不再相同。您必须解决相同的合并冲突,因为master-alphafeature-staten-island之间仍然存在冲突代码。

每次合并中出现冲突代码时,Git都会标记冲突。您可以尝试使用git merge branch -X ours来告诉Git更喜欢当前分支上的版本,或者使用git merge branch -X theirs来更喜欢其他分支的版本。(我不认为这是最好的工作流程,但这是可能的。)

我认为这是因为导致与功能分支冲突的源行仍然存在于每个主分支中。例如,假设每个主分支都有一个提交,超过特性分支的分支点,执行以下操作:

a = 1;

现在,在feature-staten-island上,有一个commit在同一行执行以下操作:

a = b + 3;

为了解决冲突,假设你真的想要这个:

a = b + 1;

那么,当将master-beta合并到feature-staten-island时,您的冲突解决方案是在feature-staten-island上设置a = b + 1;。但是,由于这与master-beta上的a = 1;仍然不同,所以当您将feature-staten-island合并回来时,仍然需要解决master-beta上的冲突行。现在master-beta也具有正确的线a = b + 1;

现在,由于master-alphamastermaster-beta处于相同的原始提交ref,因此它们仍将具有冲突的行a = 1;,即它们仍将与具有正确行a = b + 1;feature-staten-island上的行不同。它们不同的方式已经改变,因为feature-staten-island上的校正行现在是a = b + 1;,而不是原来的a = b + 3;,但这些行仍然冲突。因此,您必须在feature-staten-island和其余的每个master-XXX分支之间执行相同的冲突解决。

有道理吗?

最新更新