假设它是使用“放弃 merge 中的所有更改...”选项执行 merge 的,但意外。
这个错误的提交已经提交到“中央”存储库中。
如果我遇到这种情况如何处理需要以正确的方式 merge 分支的变化?
重现案例的命令:
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
merge 带有“丢弃...”选项的分支。UPD :
这是一个相反的问题How to merge to get rid of head with Mercurial command line, like I can do with TortoiseHg? ;-)
但仍然找不到如何恢复该步骤:-(
最佳答案
一种方法是重做 merge ,然后再 merge 一次丢弃。
在您的示例中,更新回第二个修订版(在您进行错误 merge 之前的当前工作目录父目录),然后与其他分支重做 merge 。这次要好好做。
这会给你另一个头。
然后,与旧的、不正确的 merge merge ,并在此选择丢弃。现在,您已经通过正确的 merge 有效地绕过了此 merge 。
如果您不确定这些步骤,请进行本地克隆并进行实验,您可以随时丢弃它并重新克隆并重试。
修订版 3 是旧的、不正确的 merge ,我选择了丢弃。执行 merge 4 和 5 后, merge 的痕迹消失了,一切都恢复了正常工作。是的,历史看起来有点古怪,但相信我,完全摆脱错误 merge 的清理程序比历史时间线上的小故障要糟糕得多。
基本上你在拙劣的 merge 后有这个场景:
+-- botched merge
v
0---2---3
\ /
1---+
因此,您更新回错误 merge 之前的工作文件夹父级,并进行另一次 merge ,这次正确。现在它看起来像这样:
+-- botched merge
v
0---2---3
\ \ /
\ x
1-+-4
^
+-- good merge
您的工作文件夹现在位于修订版 4,因此您再次 merge ,这次是修订版 3(错误 merge ),并选择放弃这些更改,您会得到:
+-- botched merge
v
0---2---3-5 <-- final merge, discard 3
\ \ / /
\ x /
1-+-4
^
+-- good merge
以下是 TortoiseHg 的展示方式:
关于mercurial - 恢复 "discard all changes" merge 效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5864908/