【发布时间】:2018-04-26 17:39:13
【问题描述】:
我不小心运行了 hg strip,并删除了一堆提交。从那以后我没有在回购中做任何事情。有没有办法让我恢复这个提交堆栈,撤消我刚刚运行的 hg 条?
【问题讨论】:
我不小心运行了 hg strip,并删除了一堆提交。从那以后我没有在回购中做任何事情。有没有办法让我恢复这个提交堆栈,撤消我刚刚运行的 hg 条?
【问题讨论】:
只要您没有使用--no-backup 选项运行剥离,就可以在.hg\strip-backup 下的存储库中找到剥离的变更集。如果您按日期对目录内容进行排序,那么最新的内容可能就是您需要恢复的内容。用hg unbundle <filename>恢复它。
【讨论】:
可以从剥离备份文件中使用hg pull 作为使用hg unbundle 的替代方法。
正如对该问题的另一个答案的评论中所述,hg unbundle 的选项较少,仅适用于捆绑包,但一次可以解开多个捆绑包。而hg pull 可以从单一来源(共享/网络/捆绑)中提取并具有其他选项。
这是一个使用 hg pull 的示例,基于 Isaac Jurado 的 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
【讨论】:
这是unbundle from an external post 的一个工作示例。我已经稍微清理了它以使其更通用:
使用 Mercurial 时恢复剥离的文件
如果您不小心剥离了补丁并且没有备份,您 仍然可以使用 Mercurial 恢复您的文件。要恢复您的文件:
打开 Microsoft Windows 命令提示符窗口。
导航到您剥离文件的项目文件夹。
运行
dir命令导航到 Mercurial 存储所有相关项目的
.hg文件夹 文件。再次运行
dir命令。导航到 Mercurial 存储备份的 strip-backup 文件夹 成捆的剥离补丁。
再次运行
dir命令。目录中显示多个文件 使用<hash>-hg格式。它们是剥离的备份包 补丁。使用 Windows 资源管理器查找所需文件。打开
strip-backupWindows 资源管理器中的文件夹,并按修改日期降序排序。 除非已知必要的备份包,[建议] 以相反的时间顺序恢复包开始 来自最新的捆绑包。导航回项目文件夹。
要恢复捆绑包,请运行
hg unbundle .hg\strip-backup\<bundle_file_name>。 ...您可能希望将其添加到PATH环境变量,使其可全局访问。同步项目 [使用
hg pull] 以查看恢复的补丁。如果 恢复的补丁不是需要的,然后继续恢复 按时间倒序排列补丁,直到需要的补丁 检索到。注意:您可以按任何顺序恢复备份包,而不是 使用逆时间顺序。但是,这样做可能并不安全 所以。您最终可能会尝试恢复备份包,该包具有 依赖于另一个尚未恢复的备份包。在 这种情况下会报错。
【讨论】: