无意中,通过使用GUI而不是CLI,我删除了Mercurial项目中的每个文件。
我恢复了Revert确定并失去了一些工作,因为我有时间机器我可以很容易地回来。但有没有一种方法可以取消删除/取消删除这些文件?通过手册和谷歌搜索,但看不到任何东西。有插件吗?
我可能在这里回答了我自己的问题,但文件已从目录中消失,并且不在垃圾箱中以便恢复,所以我假设删除是不可撤销的?
P.S。我知道hg forget
或hg remove -Af
会在不删除目录的情况下删除,但我的问题与我所犯的错误有关,而不是冷静思考行动。
答案 0 :(得分:148)
首先,使用hg grep
查找要恢复的已删除文件。此命令的输出将显示文件所在的最新修订版本以及已删除文件的路径。
其次,运行hg revert -r <revision number> <path to deleted file>
删除的文件现在将在您的工作副本中,随时可以提交回头。
答案 1 :(得分:8)
引用评论:
我设置了一个存储库,提交了所有,已删除然后再次提交
如果是这种情况,那么您只需将工作目录更新为以前的版本:
$ hg update -C -r-2
请注意否定修订号。如果您删除的文件不在上一版本中,您可以使用以下命令找到它们:
$ hg log -v
答案 2 :(得分:5)
这对我有用。
hg revert -r revision pathToTheFile
答案 3 :(得分:4)
适用于Mercurial 1.6及以上
如果您知道删除文件的名称,则可以使用以下命令轻松找到其修订版本:
hg log -r "removes('NAME.c')"
这将为您提供一个名为NAME.c的文件(在根目录中)的修订版本。
然后您可以将文件恢复为以前的版本(与其他答案一样):
hg revert -r <revision number> <path to deleted file>
您可以使用文件名模式来适应您所知道的内容,例如,您可以使用**/NAME.c
在所有目录中进行搜索。您可以在File Name Patters中了解相关信息。并使用此链接了解新的revset specifications。
答案 4 :(得分:1)
对已接受答案的补充 - 如果要撤消提交中的所有删除,则速度会更快。我删除了一个包含几百个文件的大文件夹并执行了hg addremove
,这完全不是我的意图,所以不得不撤消所有这些删除。
使用Find deleted files in Mercurial repository history, quickly? + 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
拆分的任何模板。
答案 5 :(得分:0)
您可以使用hg rollback
撤消对回购的最后一次提交。只有一个级别的回滚可用,因此如果您使用多个提交执行删除,则不会完全撤消您的更改。这仅适用于您的本地存储库,因此如果您已推送,则无法在远程仓库中撤消它。
答案 6 :(得分:0)
您可以使用mq(Mercurial Queues)扩展提供的hg strip
命令删除已提交的修订。这应该会让你回复你的文件。
在尝试之前进行备份,因为它会改变Mercurial的变更集数据库。
答案 7 :(得分:0)
以下方法很简单,也很愚蠢,不会出错。 如果您已删除或重命名了多个文件,则可以。
hg clone mydirectory mydirectory1
现在你开始使用mc(或远程管理器)并比较它的内容和它的内容。
完成后,只需删除mydirectory1
。
答案 8 :(得分:0)
以下对我有用。
hg revert -r <Revision Number> <File Name>
(可选,还原所有文件)
hg revert -r <Revision Number> --all