撤消意外的hg条带?

问题描述 投票:11回答:3

我不小心运行了hg strip,并删除了一堆提交。从那以后,我没有在回购中做过任何事情。有没有办法让我恢复这一堆提交,撤消我刚刚运行的hg条带?

mercurial undo revert
3个回答
16
投票

只要您没有使用--no-backup选项运行条带,就可以在.hg\strip-backup下的存储库中找到剥离的更改集。如果按日期对目录内容进行排序,则最新的内容可能是您需要还原的目录内容。用hg unbundle <filename>恢复它。


0
投票

这是一个有效的例子from an external post。我稍微清理了一下,使它更通用一点:

使用Mercurial时恢复剥离的文件

如果您不小心删除了修补程序并且没有备份,您仍然可以使用Mercurial恢复文件。要恢复您的文件:

打开Microsoft Windows命令提示符窗口。

导航到剥离文件的项目文件夹。

运行dir命令

导航到Mercurial存储所有相关项目文件的.hg文件夹。

再次运行dir命令。

导航到strip-backup文件夹,其中Mercurial存储已剥离的修补程序的备份包。

再次运行dir命令。多个文件显示在使用<hash>-hg格式的目录中。它们是剥离补丁的备份捆绑包。

enter image description here

使用Windows资源管理器查找所需文件。在Windows资源管理器中打开strip-backup文件夹,然后按修改后的日期排序。除非已知必要的备份包,否则[建议]从最近的捆绑包开始以反向时间顺序恢复捆绑包。

enter image description here

导航回项目文件夹。

要恢复捆绑包,请运行hg unbundle .hg\strip-backup\<bundle_file_name>。 ...您可能希望将其添加到PATH环境变量中,以使其可以全局访问。

enter image description here

使用hg pull同步项目以查看已恢复的修补程序。如果恢复的补丁不是所需的补丁,则继续按逆时间顺序恢复补丁,直到检索到所需的补丁。

注意:您可以按任何顺序还原备份包,而不是使用反向时间顺序。但是,这样做可能不安全。您可能最终尝试还原备份捆绑包,该备份捆绑包依赖于尚未还原的另一个备份捆绑包。在这种情况下,您将收到错误。

enter image description here


0
投票

可以从条带备份文件中使用hg pull作为使用hg unbundle的替代方法。

正如对此问题的另一个答案的评论中所指出的那样,hg unbundle的选项较少,只适用于捆绑包,但可以一次解包多个捆绑包。而hg pull可以从单一来源(共享/网络/捆绑)中提取,并有其他选择。

以下是使用基于Isaac Jurado的hg pullan 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
© www.soinside.com 2019 - 2024. All rights reserved.