使用git,如何使用`git log`而不是文件路径搜索文件模式?

Nei*_*eil 11 git version-control

您可以将git log搜索范围限制为这样的文件:

git log [branch] -- foo.c
Run Code Online (Sandbox Code Playgroud)

但是,如何将搜索限制为文件模式而不是完整路径?

  • 考虑到你可能git log 在另一个分支上运行,其中shell扩展*将不起作用,因此你不能依赖shell来进行文件模式匹配.
  • 此外,您无法指定分支 git ls-files.

Cas*_*bel 11

我倾向于做这样的事情:

git ls-files [--with-tree=<branch>] [path] | grep '<pattern>' | xargs git log [branch]
Run Code Online (Sandbox Code Playgroud)


Jas*_*wis 10

或者只是删除前导.,即:git log -- *foo.c或甚至git log -- ./*foo.c

  • 我不明白这里的向下投票(或"这是不正确的"评论.)只是引用模式,所以shell不期望通配符(除非我误解了这个问题.)并且没有必要(也没有提到)文件模式匹配的完整正则表达式.只需使用:`git log --name-only - "*/*foo*"`(或`git log {branch} ...`等),它将找到与模式匹配的所有文件. (4认同)
  • 我建议编辑这个答案,指出你可以引用通配符,所以git(而不是shell)会扩展它 - 这对我的用例来说是一个巨大的改变游戏规则. (3认同)
  • 这是不正确的。如果文件存在于文件系统上,它只会找到与文件模式匹配的提交。如果文件存在,* 将被 shell 扩展。因此,如果您执行 `git log some_other_branch -- *foo.c`,它不会在所有情况下都找到您要查找的内容。 (2认同)