mercurial – 恢复“放弃所有更改”合并效果

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

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

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

重现案例的命令:

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?的问题;-)

但还是找不到如何恢复那一步:-(

最佳答案 一种方法是重做合并,并进行另一次合并与丢弃.

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

这会给你另一个头.

然后,合并旧的,不正确的合并,并选择放弃.现在,您已经使用正确的合并绕过了这个合并.

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

修订版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如何显示:

点赞