鉴于以下git工作流程:
根据the documentation解决此冲突意味着 release-branch-1.xx (其中包含 fb1 代码)合并在 fb2 < / strong>在本地,决定保留什么(解决冲突),然后 fb2 被推送到远程以更新拉取请求。
这可以解决冲突,但是将 release-branch-1.x.x 的所有工作添加到 fb2 ,这是我想要避免的。假设我想恢复 fb1 合并提交, fb1 代码仍将在发布分支上,因为它是由 fb2 引入的。
有关如何避免这种情况的任何想法?
答案 0 :(得分:2)
在大多数工作流程中,每个功能分支的所有者负责使用“官方”代码行保持其分支的最新状态(为了尽可能通用,我将称之为集成分支主机,尽管它可以是各种工作流程中的开发,发布或其他名称)。因此,您的方案的完整序列如下所示:
Git在合并时使用两次提交的最新共同祖先,而不是代码分散的原始点。即使没有冲突,当来自主(包括 fb1 )的更改被集成到 fb2 中时,这两个分支之间的共同祖先将是包含 initial + fb1 的master上的一个点,如果 fb1 随后从master中删除,git会看到主分支上发生了这些更改,并且生成的合并将不包含那些变化。
您可以考虑代数合并,其中m = merge
,b = base
,l = left
,r = right
,f = feature
和i = initial
m = b + diff(b,l) + diff(b,r)
m = (i + f1) + diff((i + f1), (i)) + diff((i + f1), (i + f1 + f2))
m = (i + f1) + (-f1) + (f2)
m = i + (f1 + -f1) + (f2)
m = i + f2