如何使用 hg 准确恢复一个已删除的文件

How to recover exactly one deleted file using hg

最近我在处理我的存储库的本地副本时不小心删除了一个文件。自上次 hg commit 以来,我进行了各种编辑,但不知道该怎么做。最后我去了 bitbucket.org 网站,找到了文件,点击 Open raw 并通过我的浏览器下载了它。这行得通,但显然不是正确的做法。

如果我们调用我删除的文件 file.txt 和 repo code-repo,我应该如何使用 hg 恢复已删除的文件?

(我的系统基于 Ubuntu。)

我的理解是您修改了一个 source-controlled 文件,但在将任何修改提交回源代码管理之前,该文件已被删除。

在这种情况下,您必须像对待任何其他 lost-file 场景一样对待它,它在源代码管理中的事实似乎根本没有帮助除了下面列出的一些例外情况)。我会查看您的操作系统/文件系统具有哪些文件恢复功能(例如 "trash" 或 "recycle bin" 文件夹,如果有的话)。

注意事项 - 您可能很幸运,并且至少有一些更改可能存在某种自动备份或文件副本。我会寻找:

  • *.bak 或 *.orig 文件可能由编辑器或源代码管理工具创建

  • Mercurial 'shelf' 如果您曾经使用过该功能

  • The Tortoise HG 'shelf' 如果您曾经使用过该功能(实际上与标准的 Mercurial 功能不同)

  • 仔细检查已编辑的文件是否仍在编辑器中打开。 (这个救了我不止一次!)小心小编说"this file has changed, do you want to reload"点NO

  • 临时文件夹中的文件可能恰好是从编辑器自动保存的。查看时间戳,看看是否有来自正确时间段的时间。


假设您无法恢复编辑后的文件,您至少可以很容易地恢复到 hg 中的最新版本:

$ hg revert path\to\filename

这将恢复文件在作为工作文件夹父级的变更集中的状态。