Version control 重新应用';他已经退出了
好吧,这里是复杂的mercurial场景,但是mercurial中的每个场景似乎都变得复杂了 我们有两个分支,dev和test。在dev中进行了很多更改,然后合并到测试中,如下所示:Version control 重新应用';他已经退出了,version-control,mercurial,Version Control,Mercurial,好吧,这里是复杂的mercurial场景,但是mercurial中的每个场景似乎都变得复杂了 我们有两个分支,dev和test。在dev中进行了很多更改,然后合并到测试中,如下所示: hg update test hg merge dev hg commit -m "merging dev into test yo" hg push hg backout --rev=<test rev of my commit> --parent=<test rev from before
hg update test
hg merge dev
hg commit -m "merging dev into test yo"
hg push
hg backout --rev=<test rev of my commit> --parent=<test rev from before the merge>
但后来我们意识到我们不想从dev那里得到所有这些更改。所以我运行了一个类似这样的备份:
hg update test
hg merge dev
hg commit -m "merging dev into test yo"
hg push
hg backout --rev=<test rev of my commit> --parent=<test rev from before the merge>
hg回退--rev=--parent=
这成功地从合并中撤消了所有更改
问题是:我现在想从dev分支移植一些更改,但它忽略了所有更改,说“跳过祖先修订版X”
有没有办法重新应用这些更改?(除了导出和重新导入差异?我不知道
test
分支的实际状态,但是如果您仍然接近退出,我建议您在初始合并之前退出test
。使用此选项,您将不会从另一个分支继承父级
@ new head
|
|
o | backout
| |
| |
o | bad merge
/| |
| | |
o | | other branch
| | |
| |/
| o before merge
| |
| |
之后,从
dev
中移植您需要的,并将两个磁头重新合并,以保持一个磁头。OP确实明确表示他们希望避免使用diff,但这种方法在某些情况下效果很好,其他人可能会发现它很有用。此外,他们没有说明为什么要避免导入/导出(差异)
摘自
您可以使用此命令重新应用更改
假设您的更改在第78版中
转到回购的根目录并运行:
hg出口78 | hg进口
这将自动重新提交第78版中更改的内容。您还可以指定不自动提交的选项,和/或您可以导出到文件,然后在单独的步骤中导入。使用
-f
选项强制hg
继续:
hg graft -f -r 12345
(这是对的回答)我也做过类似的事情。我有这个问题,做一个虚拟合并来移除额外的头部似乎是可行的。但后来我读到关于合并有利于单亲的报道,这似乎是更直接的方式。我知道我以前见过你的案例!看来这两种解决方案仍然存在相同的问题?我想要的转速都在我的历史记录中,我必须将它们区分回来,是吗?不是真的。如果从合并之前开始,当前解决方案将删除父级。移植将是可能的,因为父母还不在历史上。只有在你移植了你的改变之后,才可以重新组合这两个头。