【问题标题】:How Can Stripped Changesets Be Recovered如何恢复剥离的变更集
【发布时间】:2023-03-28 05:45:02
【问题描述】:
我不小心在我的 mercurial 存储库中剥离了一个变更集,并删除了太多的变更集。我知道它会删除后代,但出于某种原因,我认为它只会删除那个分支上的后代或从它的分支后代开始的分支上的后代。相反,它从剥离修订后提交的每个分支中删除了所有变更集。
mercurial documentation 声明如下:
strip 不是历史重写操作,可用于公共变更集
既然变更集存在于某处,因为它不是历史重写操作,那么我该如何恢复它们呢?
【问题讨论】:
标签:
version-control
mercurial
【解决方案1】:
Mercurial 在您的存储库中名为“strip-backup”的文件夹中备份所有已剥离补丁的备份包(即:strip、amend 等)。该目录位于<repository-root>/.hg/strip-backup。
在此文件夹中,您将看到所有更改的备份,但它们的名称将以 #hash#[-amend]-backup.hg 格式作为名称。假设您知道何时运行错误的剥离操作,按时间顺序对其进行排序可以帮助您找到正确的。如果不这样做,则应按时间倒序恢复所有包,直到恢复正确的变更集。
执行恢复操作的命令是:
hg unbundle <path-to-bundle-file>
hg update