6

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!
$ 

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

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

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

4

1 回答 1

8

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

  1. 用于hg debugsetparents将损坏的父版本号替换为893e15ecb5b4我在使用之前更新的正确版本号unshelve
  2. 因为上述情况让我处于 Mercurial 忘记所有本地更改的状态,我不得不使用hg manifest | tr '\n' '\0' | xargs -0 touch它来再次注意到任何本地更改。
  3. 搁置的更改可以使用 恢复patch -p1 < .hg/shelved/default.patch,在我的情况下,这正是我一开始hg unshelve应该为我做的事情。
于 2015-05-13T11:44:28.003 回答