我不小心运行了hg strip,并删除了一堆提交。从那以后,我没有在回购中做过任何事情。有没有办法让我恢复这一堆提交,撤消刚刚运行的hg条?
答案 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
格式。他们是剥离的备份包 补丁。使用Windows资源管理器查找所需的文件。打开
strip-backup
Windows资源管理器中的“文件夹”,然后按“日期修改后的降序”排序。 除非已知必要的备份包,否则[建议] 以相反的时间顺序恢复捆绑 来自最新的捆绑软件。导航回项目文件夹。
要还原捆绑包,请运行
hg unbundle .hg\strip-backup\<bundle_file_name>
。 ...您可能要将其添加到PATH
环境变量以使其可全局访问。[使用
hg pull
]同步项目以查看还原的补丁。如果 还原的修补程序不是必需的修补程序,然后继续还原 按时间顺序反转补丁,直到所需补丁 检索到。注意:您可以以任何顺序还原备份包,而不是 使用相反的时间顺序。但是,这样做可能并不安全 所以。您可能最终尝试还原具有以下内容的备份包: 对尚未还原的另一个备份包的依赖性。在 在这种情况下,您会得到一个错误。
答案 2 :(得分:0)
除了使用Times
之外,还可以从剥离备份文件中hg pull
。
如对此问题的另一个答案的评论中所述, hg unbundle
的选项较少,仅适用于捆绑销售商品,但一次可以拆开多个捆绑销售商品。 hg unbundle
可以从单一来源(共享/网络/捆绑)中提取信息,并具有其他选择。
以下是一个基于an external post的hg 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