修改mercurial中的rebase后的本地提交

时间:2013-06-24 05:11:23

标签: mercurial dvcs mercurial-hook mercurial-extension

一开始,我的本地回购看起来像:
C1 -> C2 -> My1
并且远程存储库看起来像:
C1 -> C2 -> R1 -> R2
所以我做了:
$ hg pull
$ hg rebase
现在回购看起来像:
C1 -> C2 -> R1 -> R2 -> My1

现在我对文件“File1.java”进行了一些更改,并希望这些更改成为最后一次提交My1的一部分。当我这样做时:
$ hg commit File1.java --amend
我得到的错误信息是:
abort: cannot amend merge changesets
在谷歌上搜索我发现this,根据它,它看起来像是一个问题,但我相信它有一种解决方法。
请告诉我在上一次本地提交中修改新更改的一系列步骤。

2 个答案:

答案 0 :(得分:2)

看起来My1是合并但你的图表根本没有突出显示。你能用以下方式检查你的回购状态:

hg log --graph

如果My1是合并(并且您希望它合并)。 Mercurial 2.6应该能够编辑合并变更集。因此,如果升级到Mercurial 2.6.1或更高版本,原始命令将起作用。

   hg commit --amend  File1.java

答案 1 :(得分:0)

My1变更集在变基之前是否为合并变更集? rebase确实试图保留分支之间的父母数量(有关详细信息,请参阅rebase下的第10节)。

假设你没有推动你的变更集(即它仍然使用draft的{​​{1}}阶段)并且你愿意使用hg的补丁扩展hg phase,你可以做因此:

mq

这会将hg qimport -r tip hg qrefresh hg qfinish -a 更改集导入修补程序队列,然后更新该修补程序以包含工作目录中的当前更改。最后,它将(现在更新的)变更集移回到仓库中,准备好了。