在下面的图片中,我发现了Mozilla的mercurial存储库图表,其中我认为这种情况是不可能的。它们有两个具有相同父级的提交,其中一个是合并。我想这样做,但找不到答案。
@ merge pull request from foo polish text
|\
| o bug 1 - add text ...
|/
o merge pull request from bar bug 2
他们是如何实现这一目标的?通常当您将更改添加到头部时,如果您尝试合并,则“无需合并”。
答案 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
,然后伪造合并。