一开始,我的本地repo看起来像: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
在谷歌上我发现了这一点,根据这一点来看,这似乎是mercurial中的一个问题,但我相信有办法解决它。
请告诉我修改上次本地提交中的新更改的一组步骤。
看起来My1是一个合并,但您的图表根本没有突出显示这一点。你能用检查你的回购状态吗
hg log --graph
如果My1是一个合并(并且您希望它是合并)。Mercurial 2.6应该能够编辑合并变更集。因此,如果您升级到Mercurial 2.6.1或更高版本,您原来的命令将起作用。
hg commit --amend File1.java
My1
变更集在重定基础之前是合并变更集吗?rebase确实试图保留分支之间的父级数量(有关更多信息,请参阅rebase下的第10节)。
假设你还没有推送你的变更集(即它仍然有一个使用hg phase
的draft
阶段),并且你愿意使用hg的补丁扩展mq
,你可以这样做:
hg qimport -r tip
hg qrefresh
hg qfinish -a
这会将tip
变更集导入到修补程序队列中,然后更新该修补程序以将当前更改包括在工作目录中。最后,它将(现在已更新的)变更集移回回购中,准备就绪。