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

rei*_*den 3 mercurial tortoisehg

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

abort: can't rebase immutable changeset fa044e766d1f
hint: see hg help phases for details
Run Code Online (Sandbox Code Playgroud)

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

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

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

谢谢.

更新

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

ica*_*bod 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
Run Code Online (Sandbox Code Playgroud)

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

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

也就是说,您可以将变更集的阶段强制恢复为draft:

hg phase -d -f <changeset_id>
Run Code Online (Sandbox Code Playgroud)

这将允许您以其他方式变基或修改变更集.

但是,这不会删除已经存在的"外部世界"中的原始变更集,直到时间结束.它只会创建一个大致相同的新事物.

所以,如果你办法去解决问题,你可能只是建立在其设立一个新的问题.

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

更新:一个简单的说明 - 看过截图,看起来像一个非常古老的变化集,这让我想知道你正在尝试改变什么.正如Kindread上面提到的那样,合并将是你最好的选择.