快速查找Mercurial存储库历史记录中已删除的文件?

wso*_*son 59 version-control mercurial

您可以使用hg grep,但它会搜索所有文件的内容.

如果我只是想搜索已删除文件的文件名来恢复一个怎么办?

我试过hg grep -I file-name-pattern 模式,但这似乎没有返回任何结果.

dfa*_*dfa 85

使用模板很简单:

$ hg log --template "{rev}: {file_dels}\n"
Run Code Online (Sandbox Code Playgroud)

  • 一个小调整,以摆脱没有删除发生的提交:hg log --template"{rev}:{file_dels} \n"| grep -v':\ s*$' (6认同)
  • 有人可以解释如何使用grep来找到你关心的文件的名称,对于我们新手来说?谢谢! (4认同)
  • 这个解决方案真的很慢,如果你是一个当前的mercurial,你应该在另一个答案中使用revset解决方案. (3认同)
  • 我现在一直使用这个,我希望我可以投票给你 (2认同)
  • 这个命令非常简单.它使用提供的模板编写整个存储库日志.在这种情况下,它会为每个修订编写修订号和删除的字段 - 您可以使用grep查找所需的文件.一旦你有修订版,你可以使用`hg revert -r 123 path/to/the/file.txt`来恢复它.请注意,您需要在删除文件之前指定修订版本!(只是减1) (2认同)

sha*_*tor 49

Mercurial 1.6的更新

您也可以使用revsets:

hg log -r "removes('**')"
Run Code Online (Sandbox Code Playgroud)

(编辑:注意双*- 一个只检测来自存储库根目录的删除.)


编辑:作为马修Longtin表明,这可以通过组合模板DFA的答案给你看哪个文件列出的各个版本中删除:

hg log -r "removes('**')" --template "{rev}: {file_dels}\n"
Run Code Online (Sandbox Code Playgroud)

这具有每行列出一个修订版的优点(用于机器可读性),但是您可以通过使用%格式化删除列表中的每个项目来使输出对人类更漂亮:

hg log -r "removes('**')" --template "{rev}:\n{file_dels % '{file}\n'}\n"
Run Code Online (Sandbox Code Playgroud)

  • 我将两者结合起来:hg log --template"{rev}:{file_dels} \n"-r"remove('*')".否则,您的默认hg日志模板可能不会显示已删除的文件. (3认同)

Hop*_*ope 7

如果您使用TortoiseHg工作台,一种方便的方法是使用修订过滤器.点击ctrl+s,然后输入

removes("**/FileYouWantToFind.txt")
Run Code Online (Sandbox Code Playgroud)

**/表示您要在存储库中递归搜索.您也可以*在文件名中使用通配符.您可以在此查询与使用其他版本合并组and,or运营商.

还有这个高级查询编辑器: 在此输入图像描述