我不小心运行了hg strip,并删除了一堆提交。从那以后,我没有在回购中做过任何事情。有没有办法让我恢复这一堆提交,撤消我刚刚运行的hg条带?
只要您没有使用--no-backup
选项运行条带,就可以在.hg\strip-backup
下的存储库中找到剥离的更改集。如果按日期对目录内容进行排序,则最新的内容可能是您需要还原的目录内容。用hg unbundle <filename>
恢复它。
这是一个有效的例子from an external post。我稍微清理了一下,使它更通用一点:
使用Mercurial时恢复剥离的文件
如果您不小心删除了修补程序并且没有备份,您仍然可以使用Mercurial恢复文件。要恢复您的文件:
打开Microsoft Windows命令提示符窗口。
导航到剥离文件的项目文件夹。
运行
dir
命令导航到Mercurial存储所有相关项目文件的
.hg
文件夹。再次运行
dir
命令。导航到strip-backup文件夹,其中Mercurial存储已剥离的修补程序的备份包。
再次运行
dir
命令。多个文件显示在使用<hash>-hg
格式的目录中。它们是剥离补丁的备份捆绑包。使用Windows资源管理器查找所需文件。在Windows资源管理器中打开
strip-backup
文件夹,然后按修改后的日期排序。除非已知必要的备份包,否则[建议]从最近的捆绑包开始以反向时间顺序恢复捆绑包。导航回项目文件夹。
要恢复捆绑包,请运行
hg unbundle .hg\strip-backup\<bundle_file_name>
。 ...您可能希望将其添加到PATH
环境变量中,以使其可以全局访问。使用
hg pull
同步项目以查看已恢复的修补程序。如果恢复的补丁不是所需的补丁,则继续按逆时间顺序恢复补丁,直到检索到所需的补丁。注意:您可以按任何顺序还原备份包,而不是使用反向时间顺序。但是,这样做可能不安全。您可能最终尝试还原备份捆绑包,该备份捆绑包依赖于尚未还原的另一个备份捆绑包。在这种情况下,您将收到错误。
可以从条带备份文件中使用hg pull
作为使用hg unbundle
的替代方法。
正如对此问题的另一个答案的评论中所指出的那样,hg unbundle
的选项较少,只适用于捆绑包,但可以一次解包多个捆绑包。而hg pull
可以从单一来源(共享/网络/捆绑)中提取,并有其他选择。
以下是使用基于Isaac Jurado的hg pull
的an external post的示例:
通常备份放在
REPO/.hg/strip-backup/
中。请参阅以下示例:$ hg glog @ changeset: 2:d9f98bd00d5b tip | three o changeset: 1:e1634a4bde50 | two o changeset: 0:eb14457d75fa one $ hg strip 1 1 files updated, 0 files merged, 0 files removed, 0 files unresolved saved backup bundle to /Users/hchapman/ttt/.hg/strip-backup/e1634a4bde50-backup.hg
然后,恢复这些变更集的方法是:
$ hg pull $(hg root)/.hg/strip-backup/e1634a4bde50-backup.hg