代码之家  ›  专栏  ›  技术社区  ›  PurplePilot

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

  •  95
  • PurplePilot  · 技术社区  · 15 年前

    我恢复了正常,失去了一些工作,因为我有时间机器,我可以很容易地恢复。但是有没有办法取消删除/取消删除这些文件?浏览手册,谷歌搜索,但什么也看不见。有插件吗?

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

    p、 我知道 hg forget hg remove -Af 将在不从目录中删除的情况下删除,但我的问题与我所犯的错误有关,而不是冷静地思考该操作。

    9 回复  |  直到 12 年前
        1
  •  154
  •   BungleFeet    14 年前

    首先,使用 hg grep 第二,跑步 hg revert -r <revision number> <path to deleted file> 删除的文件现在将在您的工作副本中,准备提交回head。

        2
  •  8
  •   mrucci Bernhard Zürn    15 年前

    引述评论:

    我设置了一个存储库,提交了所有内容,删除了所有内容,然后再次提交

    如果是这种情况,则只需将工作目录更新为以前的版本:

    $ hg update -C -r-2
    

    请注意负修订号。 如果删除的文件不在上一版本中,可以使用以下方法查找:

    $ hg log -v
    
        3
  •  5
  •   Shweta    10 年前

    这对我很有效。

    hg revert -r revision pathToTheFile
    
        4
  •  4
  •   PhoneixS Oskar Dajnowicz    10 年前

    适用于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 .

        5
  •  1
  •   Community CDub    8 年前

    对已接受答案的添加—如果要撤消提交中的所有删除操作,这会更快。我删除了一个大文件夹,里面有几百个文件,然后 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 现在。

        6
  •  0
  •   ataylor    15 年前

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

        7
  •  0
  •   daniel kullmann    13 年前

    您可以使用 hg strip

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

        8
  •  0
  •   18446744073709551615    13 年前

    如果删除或重命名了多个文件,则可以。

    hg clone mydirectory mydirectory1
    

    现在,您启动mc(或Far Manager)并比较它过去和现在的情况。

    mydirectory1 .

        9
  •  0
  •   Naveen Kumar V    7 年前

    hg revert -r <Revision Number> <File Name>
    

    (可选,用于还原所有文件)

    hg revert -r <Revision Number> --all