2013-06-24 33 views
1

在年初提交底垫后,我的本地回购看起来像:
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

它看起来像My1是一个合并,但你的图并没有强调这一点。你可以检查你的回购的状态:

hg log --graph 

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

hg commit --amend File1.java 
+0

谢谢Marmoute。有效。我不确定为什么,但它看起来像是一个在hg图中的合并。我不得不使用:https://launchpad.net/~mercurial-ppa/+archive/releases在Ubuntu中安装Mercurial 2.6。 –

0

My1在重新绑定之前是否更改了合并变更集? rebase会尝试保留分支机构之间的父母数量(有关更多信息,请参阅rebase下的第10部分)。

假设你有没有推你的变更(即它仍具有使用hg phasedraft一个阶段),你愿意用汞的补丁扩展mq,你可以这样做:

hg qimport -r tip 
hg qrefresh 
hg qfinish -a 

这将tip变更集导入修补程序队列,然后更新该修补程序以在工作目录中包含当前更改。最后,它将(现在更新的)变更集移回到回购库中,准备就绪。

+0

谢谢。我还没有使用mq扩展,但它似乎是一个非常强大的工具。 –