我对this repo history感到困惑。在该页面上,您将看到一个小分支file-content
,它被合并回分支default
,即使一个头是另一个的祖先。
<击> 当我尝试做类似的事情时,除非
file-content
分支标记为非活动状态,未关闭。)
击> 编辑:我可以在回答中描述您可以与祖先合并的真实条件。
那么这里发生了什么?
答案 0 :(得分:4)
这个文档很难记录,但是如果你按照https://www.mercurial-scm.org/wiki/Merge底部的链接进行操作,你就会看到规则与一个祖先合并的例外。正如我最初推测的那样,它不需要后代是一个封闭的分支。代替:
这使我们能够开始一个新的分支并将其合并回来,即使我们在过渡期间没有在原始分支上工作。
答案 1 :(得分:3)
没有技术上的理由说明为什么你不能与祖先合并:正如你所知,Mercurial在某些情况下确实支持它。所以这纯粹是一个GUI限制。这背后的原因是当hg update
给出与hg merge
相同的结果时,为了简单起见,您应该使用它。
merge 只是三种存储库状态的混合:共同的祖先和你正在合并的两个变更集。三方合并是以大块为基础进行的。用于将本地与远程合并的表格如下所示:
ancestor local remote -> merge
old old old old (nobody changed the hunk)
old new old new (I changed the hunk)
old old new new (you changed the hunk)
old new new new (hunk was cherry picked onto both branches)
old foo bar <!> (conflict, both changed hunk but differently)
如果local
是remote
的祖先,那么ancestor == local
。因此表格变为:
ancestor local remote -> merge
old old old old (nobody changed the hunk)
old old new new (you changed the hunk)
在这两种情况下,merge
列都包含remote
列中的内容。在您的示例中,local
为default
,remote
为file-content
:
$ hg update default
$ hg merge file-content
结果是合并变更集,看起来就像file-content
。