Mercurial:你怎么能拥有拥有相同父级并且合并的提交留下一个头?

时间:2013-04-10 18:11:39

标签: mercurial

在下面的图片中,我发现了Mozilla的mercurial存储库图表,其中我认为这种情况是不可能的。它们有两个具有相同父级的提交,其中一个是合并。我想这样做,但找不到答案。

@ merge pull request from foo polish text
|\
| o bug 1 - add text ...
|/
o merge pull request from bar bug 2

他们是如何实现这一目标的?通常当您将更改添加到头部时,如果您尝试合并,则“无需合并”。

1 个答案:

答案 0 :(得分:4)

实现此目的的一种方法是使用Mercurials内置的“debug”命令。它们是你永远不需要使用的有效命令,除非你知道,调试Mercurial。理论上,使用它们可以破坏您的存储库,因此如果您确实需要,可以使用克隆。

$ hg help --debug
...
 debugsetparents
           manually set the parents of the current working directory

这个命令的作用是允许我们手动设置工作目录的父项 - 我们可以假设合并。

所以,有了这些知识,并且谨慎,我们可以做到:

$ hg log --graph
  @  1[tip]  Change by A.N.Other
  |
  o  0  Local Change
$ hg debugsetparents 0 1
$ hg log --graph
  @  1[tip]  Change by A.N.Other
  |
  @  0  Local Change
$ hg commit -m "Merged"
$ hg log --graph
  @  2[tip] Merged
  |\
  | o 1  Change by A.N.Other
  |/
  o 0  Local Change

这不是我通常建议的东西,但它可以让你说明你从“另一个分支”中引入了一些变化,当那个分支实际上在你的变化的尖端时,我想这是瞄准。

另外,请注意下面的shambulator注释 - 为了包含1中的更改,您需要在执行debugsetparents时将其作为工作目录,否则您将丢失这些更改。当然,除非您的计划是放弃这些更改,否则您应该update更改集0,然后伪造合并。