撤消意外的hg条带?

时间:2017-11-13 22:17:49

标签: mercurial undo revert

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

3 个答案:

答案 0 :(得分:16)

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

答案 1 :(得分:0)

这是一个可行的示例from an external post。我已经对其进行了一些清理,以使其更加通用:

  

使用Mercurial时恢复剥离的文件

     

如果您不小心剥离了补丁并且没有备份,则您   仍然可以使用Mercurial恢复文件。恢复文件:

     

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

     

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

     

运行dir命令

     

导航到.hg文件夹,Mercurial将在其中存储所有相关项目   文件。

     

再次运行dir命令。

     

导航到Mercurial存储备份的strip-backup文件夹   一捆剥离的补丁。

     

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

     

enter image description here

     

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

     

enter image description here

     

导航回项目文件夹。

     

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

     

enter image description here

     

[使用hg pull]同步项目以查看还原的补丁。如果   还原的修补程序不是必需的修补程序,然后继续还原   按时间顺序反转补丁,直到所需补丁   检索到。

     

注意:您可以以任何顺序还原备份包,而不是   使用相反的时间顺序。但是,这样做可能并不安全   所以。您可能最终尝试还原具有以下内容的备份包:   对尚未还原的另一个备份包的依赖性。在   在这种情况下,您会得到一个错误。

     

enter image description here

答案 2 :(得分:0)

除了使用Times之外,还可以从剥离备份文件中hg pull

如对此问题的另一个答案的评论中所述, hg unbundle的选项较少,仅适用于捆绑销售商品,但一次可以拆开多个捆绑销售商品。 hg unbundle可以从单一来源(共享/网络/捆绑)中提取信息,并具有其他选择

以下是一个基于an external posthg pull的使用示例,作者是Isaac Jurado:

  

通常将备份放置在hg pull中。见   下面的示例:

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