如何恢复在Mercurial中删除的文件(如果有的话)?

意外的是,通过使用GUI而不是CLI,我删除了Mercurial项目中的每个文件。

我恢复恢复好了,失去了一些工作,这是我有时间机器,我可以很容易地回来。 但有没有解除/删除这些文件的方法? 通过手册和谷歌search,但看不到任何东西。 任何插件?

我可能在这里回答我自己的问题,但文件已从目录中消失,并没有在垃圾回收,所以我假设删除是不可撤销的?

PS我知道, hg forgethg remove -Af将删除而不删除目录,但我的问题与我所做的错误,而不是冷静思考的行动通过。

首先,使用hg grep来查找您想要恢复的已删除文件。 此命令的输出将显示文件所在的最新修订版本,以及删除文件的path。 其次,运行hg revert -r <revision number> <path to deleted file>删除的文件现在将在您的工作副本中,准备提交回头。

从评论引用:

我build立了一个仓库,全部提交,删除,然后再次提交

如果是这种情况,那么你只需要将工作目录更新到以前的版本:

 $ hg update -C -r-2 

请注意负面的修订号码。 如果您删除的文件不在以前的版本中,可以使用以下命令find它们:

 $ hg log -v 

对于Mercurial 1.6及以上版本

如果您知道删除文件的名称,则可以通过以下方式轻松find其修订版本:

 hg log -r "removes('NAME.c')" 

这会给你一个名为NAME.c的文件(在根目录中)的修改被删除。

然后,您可以使用(与其他答案一样)将文件恢复到以前的版本:

 hg revert -r <revision number> <path to deleted file> 

你可以使用文件名模式来适应你所知道的,比如你可以使用**/NAME.c来search所有的目录。 你可以在File Name Patters中看到它。 并使用此链接了解新的revset规范 。

那么这为我工作。

 hg revert -r revision pathToTheFile 

除了接受的答案之外 – 如果要撤消提交中的所有删除,则速度更快。 我删除了一个大文件夹,其中有几百个文件,并做了hg addremove ,这完全不是我的意图,所以必须撤消所有这些删除。

在Mercurial存储库历史中使用查找删除的文件,快速? + xargs + tr,将所有修订版本-3删除恢复到修订版本-4的版本:

 hg log -r -3 --template "{rev}: {file_dels}\n" | tr ' ' '\n' | xargs hg revert -r -4 

请注意,如果您的任何文件的名称中有空格,这将失败; http://hgbook.red-bean.com/read/customizing-the-output-of-mercurial.html似乎没有任何;{file_dels}\n分割的模板。

你可以使用hg rollback撤消上一次repo的提交。 只有一个级别的回滚可用,所以如果您使用多个提交进行移除,则这不会完全撤销您的更改。 这只适用于您的本地存储库,所以如果您推送了您将无法在远程回购中撤消它。

您可以使用由mq(Mercurial Queues)扩展提供的hg strip命令删除已提交的修订。 这应该让你回到你的文件。

在尝试之前进行备份,因为它会改变Mercurial的变更集数据库。

下面的方法很简单,很愚蠢,不会出错。 如果你已经删除或重命名了多个文件,那就OK了。

 hg clone mydirectory mydirectory1 

现在你启动MC(或者远程pipe理器),并比较它是什么与它变成了什么。

完成后,只需删除mydirectory1