23

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

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

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

4

3 回答 3

36

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

[phases]
publish = False

问题是由于 mercurial 2.1 中的一个新功能,称为阶段。这很棒。是一个很好的介绍它的使用。

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

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

于 2012-03-21T18:53:32.360 回答
3

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

Pull --rebase应该在远程更改之上重新设置您的本地更改,即使客户端支持阶段,只要其他任何人都没有看到这些更改,就应该允许这样做,例如。他们没有被推到任何地方。

您是否可能已经将自己的更改推送到其他地方(将它们设置为公共阶段),然后尝试从测试存储库中提取?因为那时,这是您所看到的正确行为。

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

于 2012-03-31T23:28:39.137 回答
0

我遇到过折叠变基的这种行为。逐步退出草稿并没有帮助我。所以我刚刚拉起 ( hg pull -u) 以与远程仓库同步,​​然后只是嫁接了问题提交 ( hg graft <problem_commit>),然后修改了这个非常新的提交。

于 2014-05-08T16:26:17.527 回答