mercurial - 放弃一个变更集“合并”

时间:2010-12-06 23:43:42

标签: mercurial merge

我有两个脑袋,让我们称他们为“A”(好头)和“B”(坏头)。我希望通过从A中取出所有内容来合并它们,而从B中取出任何内容。基本上,我对A和B的合并是A。

当我尝试hg merge时,它开始向我询问这个​​文件,并且不可避免地我遇到了麻烦。我不想要任何这个!我怎么能告诉它合并它们并最终得到A,最好没有任何中间步骤?

2 个答案:

答案 0 :(得分:27)

来自第22条的Mercurial提示。在进行合并时保留“我的”或“他们的”文件。

偶尔你想要合并两个头,但是你想要丢弃其中一个头的所有变化,即所谓的虚拟合并。您可以使用ui.merge配置条目覆盖合并:

$ hg --config ui.merge=internal:local merge  #keep my files
$ hg --config ui.merge=internal:other merge  #keep their files

这里local表示工作目录的parent,另一个是你想要合并的head。这将遗漏另一位负责人的更新。

要将X合并到当前版本中而不让X中的任何更改通过,请执行:

hg --config ui.merge=internal:fail merge X
hg revert --all --rev .

https://www.mercurial-scm.org/wiki/PruningDeadBranches

中提到了另一种方法
$ hg update -C tip # jump to one head
$ hg merge otherhead # merge in the other head
$ hg revert -a -r tip # undo all the changes from the merge
$ hg commit -m "eliminate other head" # create new tip identical to the old

答案 1 :(得分:18)

我遇到的一件事,最近开始使用一些个人回购,只是使用带分支的close-branch开关。 e.g。

$ hg update B
$ hg commit --close-branch -m "Abandoning branch"

在我的推理中,如果你正在吹掉一个分支而完全支持另一个分支,那么它根本就不是合并而且称它为愚蠢。我对自己来说相对较新,而且我似乎记得 - 关闭分支从一开始就没有出现过,也许这就是为什么它没有像我通常看到的合并回转那么多的牵引力。