git diff
可以列出两个修订之间的所有文件差异:
$ git diff --name-only master
foo.txt
bar/bar.txt
bar/baz.qux
它接受<path>
glob模式形式的可选过滤器,该过滤器命名路径包括:
$ git diff --name-only master -- '*.txt'
foo.txt
bar/bar.txt
<path>
相对于工作目录:
$ cd bar/
$ git diff --name-only master -- '*.txt' # no output
$ git diff --name-only master -- '../*.txt'
foo.txt
bar/bar.txt
有没有一种方法可以调用git diff
以达到效果
$ cd bar/
$ git diff --name-only master | grep '\.txt$'
foo.txt
bar/bar.txt
无需依靠外部工具?<path>
前缀为的A/
似乎无效。
git diff
Git称为pathspec的参数是gitglossary中定义的。这是(相当长的)描述的摘录:
以冒号开头的pathspec
:
具有特殊含义。在简短形式中,前导冒号:
后跟零个或多个“魔术签名”字母(可以选择由另一个冒号终止:
),其余为与路径匹配的模式。“魔术签名”由ASCII符号组成,它们既不是字母数字,全局,正则表达式特殊字符也不是冒号。如果模式以不属于“魔术签名”符号集且不是冒号的字符开头,则可以省略终止“魔术签名”的可选冒号。在长格式中,前导冒号
:
后面紧跟着一个开放的括号(
,一个用逗号分隔的零个或多个“魔术词”列表和一个紧密的括号)
,其余是与路径匹配的模式。...最佳
魔术字
top
(魔术签名:)/
使模式从工作树的根开始进行匹配,即使从子目录内部运行命令也是如此。
因此,我们可以使用:(top)
或:/:
。这与您的示例中的设置相同:
$ git diff --name-only
bar/bar.txt
bar/baz.qux
foo.txt
(这些均已修改)
$ cd bar
$ git diff --name-only
bar/bar.txt
bar/baz.qux
foo.txt
(即使没有子目录,也仍然列出所有子目录,即使在子目录中也是如此)
$ git diff --name-only -- '*.txt'
bar/bar.txt
(由于位于子目录和路径规范中,因此仅列出了一个)。现在我们使用pathspec说明符:
$ git diff --name-only -- ':(top)*.txt'
bar/bar.txt
foo.txt
$ git diff --name-only -- ':/:*.txt'
bar/bar.txt
foo.txt
(:(top)
或:/:
作为前缀列出所有内容)
请参阅文档中剩余的词,它们是功能强大的工具。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句