gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 04:11:30 25 4
gpt4 key购买 nike

假设它是使用“放弃 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com