如何修复因 hg 解架而损坏的存储库?



我在存储库中使用了hg shelve,在那里我有一些未完成的更改,因为我需要切换到不同的头部并执行不相关的更改。

一旦我在另一个头上的工作被提交,我就切换回我最初使用hg shelve的头并运行hg unshelve命令。结果是:

$ hg unshelve
unshelving change 'default'
adding changesets
adding manifests
adding file changes
added 1 changesets with 4 changes to 4 files (+1 heads)
abort: uncommitted changes
$ hg diff
warning: ignoring unknown working parent 893e15ecb5b4!
$ 

我确实在unshelve命令之前和之后运行了hg head并看到了相同的输出。提交893e15ecb5b4从未存在过,我不知道 Mercurial 从哪里得到它。

如果它有任何相关性,我正在 Ubuntu 2.8.2 上运行 Mercurial 版本 14.04。

如何使存储库恢复到工作状态,以及如何恢复搁置的更改?

以下步骤为我解决了问题:

使用
  1. hg debugsetparents将损坏的父修订号893e15ecb5b4替换为我在使用unshelve之前更新到的正确修订号
  2. 由于上述内容使我处于Mercurial忘记所有本地更改的状态,因此我不得不使用hg manifest | tr 'n' '' | xargs -0 touch来使其再次注意到任何本地更改。
  3. 搁置的更改可以使用patch -p1 < .hg/shelved/default.patch恢复,就我而言,这完全是hg unshelve首先应该为我做的事情。

最新更新