mercurial - 恢复 "discard all changes" merge 效果

标签 mercurial tortoisehg

假设它是使用“放弃 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 的展示方式:

history after new merges

关于mercurial - 恢复 "discard all changes" merge 效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5864908/

相关文章:

tortoisehg - 如何在 Tortoise HG Workbench 中检测重命名

svn - Mercurial/SVN : Multiple commits from one set of differences?

version-control - 具有稳定和默认分支的 Mercurial 工作流程

eclipse - 如何从受密码保护的站点更新 Eclipse 插件?

mercurial - 如何保持 mercurial graph "flat"

mercurial - 在 TortoiseHg Workbench 中按多个条件过滤

mercurial - 如何定义 hg 忽略异常?

django - Mercurial:在初始提交后排除 django settings.py

eclipse - 版本控制与 eclipse 集成

Mercurial:如何推送到默认分支?