如何恢复在Mercurial中删除的文件(如果有的话)?
意外的是,通过使用GUI而不是CLI,我删除了Mercurial项目中的每个文件。
我恢复恢复好了,失去了一些工作,这是我有时间机器,我可以很容易地回来。 但有没有解除/删除这些文件的方法? 通过手册和谷歌search,但看不到任何东西。 任何插件?
我可能在这里回答我自己的问题,但文件已从目录中消失,并没有在垃圾回收,所以我假设删除是不可撤销的?
PS我知道, hg forget
或hg 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
。