【问题标题】:How can I repair a repository broken by hg unshelve?如何修复被 hg unshelve 破坏的存储库?
【发布时间】:2015-05-13 11:12:53
【问题描述】:

我在存储库中使用了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 上运行 Mercurial 版本 2.8.2。

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

【问题讨论】:

    标签: mercurial unshelve


    【解决方案1】:

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

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

    【讨论】:

    • hg debugrebuildstate 可能是您需要的,而不是#2。
    • @MarkTolonen 因为它比我做的更简单?或者因为会有额外的信息可能不同步?如果是后者,那么哪些信息会不同步?
    • 它强制 Mercurial 重建其内部状态,所以我想它更准确。我从hgtip.com/tips/advanced/2010-04-23-debug-command-tricks得到提示
    猜你喜欢
    • 2012-05-27
    • 1970-01-01
    • 1970-01-01
    • 2013-09-11
    • 2012-01-06
    • 1970-01-01
    • 2016-05-31
    • 1970-01-01
    • 2020-04-22
    相关资源
    最近更新 更多