3

有时,当我使用 rebase 进行拉取时,我会收到以下错误:

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

有趣的是,错误的变更集(每次都是同一个)非常古老,并且已经公开。

这是截图:https ://db.tt/xHiOxm6R

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

谢谢。

更新

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

4

1 回答 1

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

处于draft并且secret被认为是可变的变更集,也就是说,您可以更改它们的历史记录、修改它们(例如,可能更改作者)等等。

位于的变更集public被认为是不可变的,当它们处于此阶段时,您“不能”更改它们的任何内容。原因是,它们已经被外界看到了,所以如果你进行任何修改,可能会导致问题。理论上,您不能删除公开的变更集 - 如果您尝试更改它,您只需创建另一个变更集。

也就是说,您可以强制变更集的阶段回到draft这样的状态:

hg phase -d -f <changeset_id>

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

但是,这不会删除“外部世界”中的原始变更集......已经存在,并且会直到时间本身结束。它只会创建一个新的,它几乎做同样的事情。

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

警告:由于我看不到这里的屏幕截图,我可能会稍后修改我的答案。

更新:一个简短的说明 - 看过截图后,这看起来像是一个非常古老的变更集,这让我想知道你想要重新设置什么。正如 Kindread 上面提到的,合并将是你最好的选择。

于 2013-10-23T16:32:04.100 回答