git diff按文件名过滤

Zan*_*ier 16 git bash git-diff git-bash

我希望git diff通过文件名过滤结果.

特别是,我想要一个名为"AssemblyInfo.cs"的文件的diff,但是位于git存储库中的任何位置.

我在Cygwin上使用git,如果这有所不同.

GoZ*_*ner 15

git diff需要分隔的文件参数--- 试试这个:

find . -name <pattern> | xargs git diff --
Run Code Online (Sandbox Code Playgroud)

xargs确保正确处理空格,制表符,换行符等.

您可以使用--name-status参数to 调试它git diff.你也可以尝试:

git diff --name-only | grep <pattern>
Run Code Online (Sandbox Code Playgroud)

[编辑]尝试:

git diff --name-status -- `find . -name '<pattern>'`
ebg@taiyo(98)$ git diff --name-status -- `find . -name '*.scm'`
M       scheme/base/boolean.scm
M       surf/compiler/common.scm
M       surf/compiler/compile.scm
M       surf/compiler/expand.scm
Run Code Online (Sandbox Code Playgroud)

  • 正确的'StackOverflow'方法是说"谢谢你Gozoner,根据你的答案我已经弄明白了",然后用复选标记奖励我.不发布自己的答案. (2认同)
  • 对不起,我有多粗鲁!谢谢你的帮助.这是最终对我有用的解决方案:`find.-name"AssemblyInfo.cs"-print0 | xargs -0 git diff - ` (2认同)

小智 9

最简单的方法是简单地使用通配符:

git diff -- '*AssemblyInfo.cs'
Run Code Online (Sandbox Code Playgroud)


至少这在我的Git v1.8.4,bash 3.2和zsh 5.7上有效。

  • 这应该是公认的答案。求助于“find”或“grep”的答案速度缓慢、笨拙,并且对于更复杂的用例来说容易崩溃。 (4认同)
  • 你不能像那样限制路径 (2认同)
  • 它确实有效,但您需要 `git diff -- '*AssemblyInfo.cs'` 以避免 shell 试图扩展。 (2认同)

rkw*_*tra 6

也许最简单的选择是使用:

git diff "*/*AssemlyInfo.cs"
Run Code Online (Sandbox Code Playgroud)

从 git 2.20.1 开始工作

  • 它应该是“**/*AssemblyInfo.cs”来搜索存储库中任何位置的文件,而不仅仅是在一级嵌套目录下。完成此更正后,它就是问题的最佳答案,并且应该成为可接受的答案。 (5认同)