恢复“丢弃所有更改”合并效果

时间:2011-05-03 04:07:39

标签: mercurial tortoisehg

让我们假设它已执行合并“放弃所有来自合并的更改...”选项,事故。

这个错误的提交已经提交到“中央”存储库。

如果我需要以正确的方式合并分支更改,如何处理这种情况?

重现案例的命令:

hg init mr
cd mr

echo "123" > file.txt
hg add
hg ci -m "initial"

hg branch br
echo "234" >> file.txt
hg ci -m "in branch"

hg up default
echo "567" >> file.txt
hg ci -m "in default"

在这些命令打开tortoisehg之后,将第二个修订版(默认头部)与br分支合并为“Discard ...”选项。

UPD

这是一个关于做相反How to merge to get rid of head with Mercurial command line, like I can do with TortoiseHg?; - )

的问题

但仍无法找到如何恢复该步骤: - (

1 个答案:

答案 0 :(得分:2)

一种方法是重做合并,然后用discard进行另一次合并。

在您的示例中,更新回第二个版本(在执行错误合并之前当前工作目录为父版本),然后重新与该另一个分支合并。这次做得恰到好处。

这会给你另一个头。

然后,合并旧的,不正确的合并,并选择放弃。现在,您已经有效地绕过了这个合并。

如果您不确定这些步骤,请进行本地克隆和实验,您可以随时丢弃并重新停留并重试。

修订版3是旧的,不正确的合并,我选择了丢弃。合并4和5后,合并的痕迹消失了,一切都恢复正常。是的,历史看起来有点时髦,但相信我,完全摆脱糟糕合并的清理程序远比你历史时间线上的小小的更糟糕。

在拙劣的合并之后,基本上你有这种情况:

            +-- botched merge
            v
    0---2---3
     \     /
      1---+

因此,您更新回错误合并之前的工作文件夹父级,并执行另一次合并,这次正确。现在它看起来像这样:

            +-- botched merge
            v
    0---2---3
     \   \ /
      \   x
       1-+-4
           ^
           +-- good merge

您的工作文件夹现在处于修订版4,因此您进行了另一次合并,这次是修订版3(错误合并),并选择放弃这些更改,您就明白了:

            +-- botched merge
            v
    0---2---3-5  <-- final merge, discard 3
     \   \ / /
      \   x /
       1-+-4
           ^
           +-- good merge

以下是TortoiseHg如何显示:

history after new merges