让我们假设它已执行合并“放弃所有来自合并的更改…”选项,事故.
而这个错误的提交已经被提交到“中央”存储库中.
如果我需要以正确的方式合并分支更改,如何处理这种情况?
重现案例的命令:
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如何显示: