按文件扩展名显示两个Git分支之间的差异

按文件扩展名显示两个Git分支之间的差异,git,grep,git-bash,Git,Grep,Git Bash,如何列出两个git分支之间的差异,但仅显示具有特定文件扩展名的文件 我发现以下内容为我提供了两个分支之间的所有不同文件:- git diff -r --name-only --no-commit-id branch1 branch2 但后来我试着把这些信息输入到grep中,只搜索“yml”文件……结果一无所获 (git diff -r --name-only --no-commit-id branch1 branch2) | grep "*.yml" 我可以在第一个命令中看到yml文件输出,

如何列出两个git分支之间的差异,但仅显示具有特定文件扩展名的文件

我发现以下内容为我提供了两个分支之间的所有不同文件:-

git diff -r --name-only --no-commit-id branch1 branch2
但后来我试着把这些信息输入到grep中,只搜索“yml”文件……结果一无所获

(git diff -r --name-only --no-commit-id branch1 branch2) | grep "*.yml"
我可以在第一个命令中看到yml文件输出,但在第二个命令中什么也看不到

  • 我应该不使用grep吗
  • 我的grep命令缺少什么吗
  • 还是有更好的方法

*。yml
不是有效的正则表达式


*
表示“前面的字符,零次或多次”,因此它作为正则表达式的前导字符没有意义。如果您想查找所有以
.yml
结尾的文件,只需
。|grep'\.yml$'
。我们之所以转义
,是因为
表示“任何字符”,而
$
表示“行尾”(因此这显然与名为
foo.yml.j2
的文件不匹配)。

*。yml
不是有效的正则表达式


*
表示“前面的字符,零次或多次”,因此它作为正则表达式的前导字符没有意义。如果您想查找所有以
.yml
结尾的文件,只需
。|grep'\.yml$'
。我们之所以转义
,是因为
表示“任何字符”,而
$
表示“行尾”(因此这显然与名为
foo.yml.j2
的文件不匹配)。

您可以为git diff添加一个类似shell的模式

git diff -r --name-only --no-commit-id branch1 branch2 "*.yml"

正如@larsks所说,grep接受正则表达式,这与shell通配符不同。

您可以为git diff添加一个类似shell的模式

git diff -r --name-only --no-commit-id branch1 branch2 "*.yml"

正如@larsks所说,grep接受正则表达式,这与shell通配符不同。

grep
接受正则表达式,其中
*
具有完全不同的含义

是的,您不必使用grep:

git diff -r --name-only --no-commit-id branch1 branch2 -- "*.yml"

grep
接受正则表达式,其中
*
具有完全不同的含义

是的,您不必使用grep:

git diff -r --name-only --no-commit-id branch1 branch2 -- "*.yml"