我们有一个代码审查存储库,其中人hg push -f
各种各样的东西。审核完成后,我们从项目的中央存储库,rebase和push中提取。我最近升级到mercurial 2.1并收到此消息:
abort: can't rebase immutable changeset 43ab8134e7af
(see hg help phases for details)
当我从中央存储库尝试hg pull --rebase
时。我该如何解决?
答案 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>
),然后修改了这个非常新的提交。