如何修复被 hg unshelve 损坏的存储库?
How can I repair a repository broken by hg unshelve?
我在存储库中使用了 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 14.04 运行ning Mercurial 版本 2.8.2。
如何让我的存储库恢复工作状态,以及如何恢复搁置的更改?
以下步骤为我解决了问题:
- 使用
hg debugsetparents
将损坏的父版本号 893e15ecb5b4
替换为我在使用 unshelve
之前更新到的正确版本
- 因为上面的内容让我处于 Mercurial 忘记了所有本地更改的状态,所以我不得不使用
hg manifest | tr '\n' '[=13=]' | xargs -0 touch
让它再次注意到任何本地更改。
- 可以使用
patch -p1 < .hg/shelved/default.patch
恢复搁置的更改,在我的情况下,这正是 hg unshelve
首先应该为我做的。
我在存储库中使用了 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 14.04 运行ning Mercurial 版本 2.8.2。
如何让我的存储库恢复工作状态,以及如何恢复搁置的更改?
以下步骤为我解决了问题:
- 使用
hg debugsetparents
将损坏的父版本号893e15ecb5b4
替换为我在使用unshelve
之前更新到的正确版本
- 因为上面的内容让我处于 Mercurial 忘记了所有本地更改的状态,所以我不得不使用
hg manifest | tr '\n' '[=13=]' | xargs -0 touch
让它再次注意到任何本地更改。 - 可以使用
patch -p1 < .hg/shelved/default.patch
恢复搁置的更改,在我的情况下,这正是hg unshelve
首先应该为我做的。