mercurial中由于错误的合并基础而出现的合并问题:what';发生什么事了?
我有一个存储库,其中两个修订版(14321和14319)共享一个父版本(14318)-两个变更集都是14318的直接子版本。然而,修订集查询mercurial中由于错误的合并基础而出现的合并问题:what';发生什么事了?,mercurial,merge,ancestor,Mercurial,Merge,Ancestor,我有一个存储库,其中两个修订版(14321和14319)共享一个父版本(14318)-两个变更集都是14318的直接子版本。然而,修订集查询祖先(14321,14319)不会返回14318,而是返回一个更老的变更集。发生了什么事 乌龟图片截图: 背景:我最近遇到了奇怪的合并冲突,结果是mercurial试图重新应用已合并的更改而引起的。我可以追溯到一个奇怪的合并基选择,它导致两个头部都包含相同的更改-但我不明白为什么会发生这种情况,以及我如何在将来防止它(我选择DVCS部分是为了在第一时间避免
祖先(14321,14319)
不会返回14318,而是返回一个更老的变更集。发生了什么事
乌龟图片截图:
背景:我最近遇到了奇怪的合并冲突,结果是mercurial试图重新应用已合并的更改而引起的。我可以追溯到一个奇怪的合并基选择,它导致两个头部都包含相同的更改-但我不明白为什么会发生这种情况,以及我如何在将来防止它(我选择DVCS部分是为了在第一时间避免此类问题…我想,祖先是14294年。由于您的两个新提交都是合并,因此您现在有多个祖先,这使得选择不明确
不幸的是,没有办法告诉mercurial使用哪一种潜在祖先。这张图片显示的不是一个而是两个共同的祖先。因此,它看起来像是一个纵横交错的合并案例,合并问题源于选择一个或另一个共同祖先 参考资料:
B --- D
/ \ / \
/ \ / \
A X F
\ / \ /
\ / \ /
C --- E
你的情况是:
B
-----------o---- } stable/production
C \ \ F
------o------o---\------o } default
\ D \ /
-----------o--- } feature
E
A = ?
B = 14318
C = 14294
D = 14319
E = 14321
F = ?
要产生F
,有两种可能的电路:B-D-E-F
和C-D-E-F
。Mercurial选择了后者
如果没有合并生产分支和功能分支,就可以避免交叉。
修补程序可能已通过默认分支传播到功能分支。日志将是:
B
-----------o } stable/production
C \ F
------o------o------o } default
\ D \ /
-------o--- } feature
E
对于合并集的共同祖先的错误基检测,已知一个:
如果任何合并集包含与合并编辑无关的内容,则可能是错误的错误。。。祖先()是“两个变更集中最伟大的共同祖先”,根据help@LazyBadger:是的,你说得对,但看起来他们对“最伟大”的概念完全是DAG意义上的——14294和14318没有直接关系。当然,使用14294仍然是一个糟糕的猜测,因为它在时间上更老,在图形距离意义上也更远,但对于算法来说,这是一个可以理解的错误。@eamonnerbanne-不,“最大”的意思是latest@LazyBadger:这与问题中的截图相矛盾-显然,最伟大并不一定意味着最新。什么是最新的呢?根据变更集的时间点击?修订号?我们(几乎总是)使用客户机-服务器拓扑结构-我看不出这有什么帮助?它基本上是一个三分支合并:有一个生产分支和一个修补程序变更集(14318):其他两个分支都需要这个。所以他们合并了它:默认分支在14319中这样做,而特征分支在14321中这样做。但是当特性和默认分支合并时,你会看到上面的屏幕截图。是的,这是一个很好的建议。当然,在现实中,它有点复杂;我已经解释了分支名称,所以当大多数提交都是匿名头,后来一个碰巧变成热修复程序时,它们才有意义。因此,对于我们的团队来说,问题在于提交的位置不应该是提交的位置,而且我们的分支的名称令人困惑(回顾过去)——但这有点超出了范围?谢谢你的更新,这样肯定会更有帮助!