不正确的“无法重新定义不可变的变更集”错误

时间:2013-10-23 13:18:25

标签: mercurial tortoisehg

偶尔,当我使用rebase进行拉动时,我会收到以下错误:

abort: can't rebase immutable changeset fa044e766d1f
hint: see hg help phases for details

有趣的是,改变错误(每次都是同一个错误)已经很老了,并且已经公开了。

以下是截图:https://db.tt/xHiOxm6R

看来我可以忽略这个消息(至少,到目前为止,我没有遇到任何麻烦),但显然,我想帮助Hg解决这个问题,以便它不会继续成为未来的麻烦。

感谢。

更新

hg out没有列出它。克隆可能大约6个月大。另外,据我所知,其他开发人员都没有遇到这个问题。

1 个答案:

答案 0 :(得分:6)

(注意:由于严格的防火墙,我无法看到屏幕截图)。

您提到每次更改集时都会出现错误,该变更集已经过时且已经公开。"这应该会给你一个提示,说明你为什么会收到这个错误。

Mercurial中的变更集有3个可能的阶段:

 - public : changeset is visible on a public server
 - draft : changeset is not yet published
 - secret : changeset should not be pushed, pulled, or cloned

draftsecret处的变更集被认为是可变的,即您可以更改其历史记录,修改它们(例如,可能更改作者),等等。

public处的变更集被认为是不可变的,您"不能"当他们处于这个阶段时,改变他们的一切。原因是,他们已经被外界看到了,所以如果你进行任何修改,它可能会引起问题。理论上说,您无法删除公开的变更集 - 如果您尝试更改变更集,则只需创建另一个变更集。

也就是说,您可以将变更集的阶段强制回draft,如下所示:

hg phase -d -f <changeset_id>

这将允许您以其他方式重新定义或修改变更集。

但是,这将删除已经存在的&#34;外部世界&#34; ...中的原始变更集,并将一直到时间本身。它只会创建一个大致相同的新东西。

因此,如果 尝试解决问题,您可能只是在其位置创建一个新问题。

警告:因为我无法从这里看到截图,我可能会在稍后修改我的答案。

更新:快速说明 - 看过屏幕截图,看起来像非常旧的变更集,这让我想知道你正在尝试改变什么。正如Kindread上面提到的那样,合并将是你最好的选择。