当我做“hg head”时,我看到两个脑袋。
我想从第一个开始进行更改,完全忽略另一个。
那是什么hg push -f呢?
我如何告诉mercurial忽略第二个头?
答案 0 :(得分:5)
这篇技巧很好地涵盖了它:
如果您已更新为所需的那个,那么您将运行:
hg --config ui.merge=internal:local merge #keep my files
你不想要hg push -f
。
答案 1 :(得分:3)
This page提供了三种不同的方法来摆脱分支,但也适用于头部。当Branch有多个孩子时,会创建changeset。可以使用hg branch
命令创建命名分支,但是可以通过将两个更改集提交给同一父代来创建未命名的分支(无论是意外还是故意)。
例如,如果我创建一个新的存储库,向其添加一个文件,然后提交,那么该提交将被更改为0.
hg init # create repo
# edit file myfile.txt
hg add myfile.txt
hg ci -m 'added myfile.txt' # creates changeset 0
然后我做了一些更改并再次提交,创建了变更集1,其父级是变更集0。
# more edits to myfile.txt
hg ci -m 'changed myfile.txt' # creates changest 1, with parent changeset 0
现在,由于某些未知原因,我回到更改集0,对myfile.txt进行一些更改并提交它们。
hg up -C 0 # update to changeset 0
# more edits to myfile.txt
hg ci -m 'edited myfile.txt' # creates changeset 2, who's parent is also changest 0
现在我们做了一些奇怪的事情。我们在变更集1之前回过头来做了不同的改变。我们已经在我们的代码中回过头来,改变了创建像BttF第二部分中的替代宇宙的东西!
好吧,不是真的。我们真的只是创建了一个分支。然而,它是一个未命名的分支,因为我们没有使用hg branch
命令创建它(因此不会显示在`hg分支中)。它还创建了一个新的head。头部只是没有子节点的变更集,因此任何尚未合并或关闭的已命名或未命名的分支都将具有头部。
这是一个人为的例子,可能不是你做的。更常见的是,如果您在两个地方工作而忘记在一个地方完成工作,或在另一个地点再次开始工作时拉动。如果您在一个位置完成时没有按下,当您在第二个位置开始工作时,您可能正在处理较旧的变更集,因此任何提交都将创建第二个头。当你忘记拉扯时会发生类似的事情。
正如我之前所说,这会创建一个未命名的分支。但是,您可以将此分支视为与任何其他分支相同。命令hg update branch_name
只是将您更新为该分支的头部,因此对于未命名的分支,您只需使用hg update head_revision
更新到该未命名分支的头部,hg heads
将列出你(或hg heads -v
如果你想了解更多关于每个头的信息。)
我建议只关闭你不再需要的头部(上面第一个链接的第一个选项)。这样它仍然存在以防万一你以后需要它,但它不会出现在hg heads
中。为此,请运行以下命令:
hg up -C head_to_close
hg commit --close-branch -m 'Closing un-wanted head'
hg up -C head_to_keep
你必须弄明白你要关闭哪个头。 hg heads -v
将为您提供有关头部的扩展信息。您还可以更新每个hg up head_changeset
并检查代码以确定要关闭的代码。