推送到评论存储库后,“abort:不能在rebase上重新定义不可变的变更集”

时间:2012-03-21 18:52:57

标签: mercurial mercurial-phases

我们有一个代码审查存储库,其中人hg push -f各种各样的东西。审核完成后,我们从项目的中央存储库,rebase和push中提取。我最近升级到mercurial 2.1并收到此消息:

abort: can't rebase immutable changeset 43ab8134e7af
(see hg help phases for details)

当我从中央存储库尝试hg pull --rebase时。我该如何解决?

3 个答案:

答案 0 :(得分:36)

在评论存储库的.hg / hgrc文件中,添加以下行:

[phases]
publish = False

问题是由于mercurial 2.1中的一个名为phases的新功能。这很棒。 Here是对其使用的一个很好的介绍。

要立即使有问题的变更集变为可变,请使用hg phase -f -d REV强制REV再次变为可变。一旦hgrc文件被更改,您就不必再这样做了。

作为旁注,hg push -f是蹩脚的。创建一个别名hg review,将-f推送到该存储库。

答案 1 :(得分:3)

我不认为在服务器上禁用相位支持是正确的解决方案,但你的问题听起来很奇怪。

除了远程更改之外,

Pull --rebase应该允许更改本地更改,即使客户端支持这些更改,只要这些更改未被其他人看到,例如。他们没有被推到任何地方。

您是否有可能已经将自己的更改推送到其他地方(将其设置为公共阶段),之后尝试从测试仓库中取出?因为那样,这是你所看到的正确行为。

大多数情况下手动混淆阶段(使用hg phase -f)是一个坏主意,因为它很容易导致历史重写,这可能导致重复的变更集,或其他人尝试时的各种错误拉/推。如果变更集被标记为公开(如您的情况),则可能是有充分理由的。

答案 2 :(得分:0)

我在崩溃的rebase中遇到过这样的行为。逐步退回选秀并没有帮助我。所以我只是拉起(hg pull -u)与远程仓库同步,​​然后只是嫁接了问题提交(hg graft <problem_commit>),然后修改了这个非常新的提交。