我有三个master
分支
master
master-alpha
master-beta
所有这些分支都有100
提交,并且是This branch is even with master
。
我有三个"特色"分支。
feature-brooklyn
(master
…feature-brooklyn
)feature-staten-island
(master
…feature-brooklyn
…feature-staten-island
)feature-manhattan
(master
…feature-manhattan
)
每个都是master
的分支,feature-staten-island
对master
进行了根本性的更改,因此它已经与feature-brooklyn
合并。
这是设置。
- 我做了一个PR,将
feature-brooklyn
添加到master-beta
中。没有任何问题 - 我做了一个PR,将
feature-staten-island
添加到master-beta
中,存在合并冲突。所以我将master-beta
合并到feature-staten-island
中,然后将更新推送到feature-staten-island
这很有效,我可以合并。
我发现的问题是:
- 我现在做一个PR,将
feature-brooklyn
添加到master-alpha
中。工作 - 我做了一个PR,将
feature-staten-island
添加到master-alpha
,但仍然存在合并冲突
为什么当我解决功能分支与另一个分支的合并冲突,然后更新功能分支时,当我在另一个代码完全相同的分支上合并时,它仍然存在冲突?
我的目标是拥有三个干净的功能分支,它们可以很容易地合并到三个主分支中。我不明白为什么一旦我为其中一个主分支修复了合并冲突,为什么当我尝试将其合并到另一个主支路时仍然存在冲突。
当您解决master-beta
和feature-staten-island
之间的冲突时,您可能选择将代码保留在feature-staten-island
上。
这意味着CCD_ 35和CCD_ 36不再相同。您必须解决相同的合并冲突,因为master-alpha
和feature-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-alpha
和master
与master-beta
处于相同的原始提交ref,因此它们仍将具有冲突的行a = 1;
,即它们仍将与具有正确行a = b + 1;
的feature-staten-island
上的行不同。它们不同的方式已经改变,因为feature-staten-island
上的校正行现在是a = b + 1;
,而不是原来的a = b + 3;
,但这些行仍然冲突。因此,您必须在feature-staten-island
和其余的每个master-XXX
分支之间执行相同的冲突解决。
有道理吗?