我有三个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
合并。
这是设置。
feature-brooklyn
添加到master-beta
。没有问题。feature-staten-island
添加到master-beta
,这是一个合并冲突。因此,我将master-beta
合并到feature-staten-island
,然后将更新推送到feature-staten-island
。这有效,我可以合并。
我发现的问题是:
feature-brooklyn
添加到master-alpha
。作品。feature-staten-island
添加到master-alpha
,但仍然存在合并冲突。 为什么当我使用另一个分支解析功能分支的合并冲突然后更新功能分支时,当我在另一个分支上使用完全相同的代码进行合并时,仍然存在冲突吗?
我的目标是拥有三个干净的功能分支,可以轻松地合并到三个主分支中。我不明白为什么一旦我为其中一个主分支修复合并冲突,为什么当我尝试将其合并到另一个主分支时仍然存在冲突。
答案 0 :(得分:1)
解决master-beta
和feature-staten-island
之间的冲突后,您可能会选择将代码保留在feature-staten-island
上。
这意味着master-beta
和master-alpha
不再相同。您必须解决相同的合并冲突,因为master-alpha
和feature-staten-island
之间仍存在冲突的代码。
每次合并中存在冲突的代码时,Git都会标记冲突。您可以尝试使用git merge branch -X ours
告诉Git更喜欢当前分支上的版本,或git merge branch -X theirs
更喜欢其他分支的版本。 (我不认为这是最好的工作流程,但它有可能。)
答案 1 :(得分:1)
我认为这是因为导致与您的功能分支冲突的源代码行仍然存在于每个主分支中。例如,假设每个主分支都有一个提交,超过特征分支分支的点,它执行以下操作:
a = 1;
现在,在feature-staten-island
上,有一个提交,它在同一行上执行以下操作:
a = b + 3;
要解决冲突,我们假设你真的想要这个:
a = b + 1;
然后,在将master-beta
合并到 feature-staten-island
时,您的冲突解决方案是a = b + 1;
上feature-staten-island
。但是,由于这仍然与a = 1;
上的master-beta
不同,因此当您合并master-beta
时,仍需要解决 feature-staten-island
上的冲突行背部。现在master-beta
也有正确的行a = b + 1;
。
现在,由于master-alpha
和master
与master-beta
处于同一原始提交参考,因此它们仍然会有冲突的行a = 1;
,即它们仍然是与<{1}}上的不同,<{1}}具有正确的行feature-staten-island
。它们不同的方式已更改,因为a = b + 1;
上的更正行现在是feature-staten-island
而不是原始a = b + 1;
,但这些行仍然存在冲突。因此,您必须在a = b + 3;
与其余feature-staten-island
个分支之间进行相同的冲突解决。
有意义吗?