有时会有几个更改的文件以及一些新的、已删除和/或重命名的文件。当做git diff
或git-log
我想省略它们时,我可以更好地发现修改。
实际上,最好列出不包含内容的新文件和已删除文件的名称。对于重命名为“新”的“旧”,我想选择区分“旧”和“新”。
该--diff-filter
选项同时适用于diff
和日志。
我使用--diff-filter=M
了很多将差异输出限制为仅内容修改的方法。
要检测重命名和副本并在 diff 输出中使用它们,您可以分别使用-M
和以及 和选项。-C
R
C
--diff-filter
官方文件:
--diff-filter=[(A|C|D|M|R|T|U|X|B)…[*]]
仅选择已添加 (A)、已复制 (C)、已删除 (D)、已修改 (M)、已重命名 (R) 的文件,其类型(即常规文件、符号链接、子模块……)已更改 (T),未合并 (U)、未知 (X) 或配对已损坏 (B)。可以使用过滤字符的任意组合(包括无)。
在组合中添加 *(All-or-none)时,如果有任何文件与比较中的其他条件匹配,则选择所有路径;如果没有符合其他条件的文件,则不选择任何内容。
此外,这些大写字母可以小写以排除。例如 --diff-filter=ad 排除添加和删除的路径。
示例:仅显示已添加、已更改、已修改的文件,不包括已删除的文件:
git diff --diff-filter=ACM
此外,这些大写字母可以小写以排除。
例如--diff-filter=ad
,排除添加和删除的路径。
在您的情况下,git diff --diff-filter=ad
可以使用,但请确保不要在同一过滤器中使用大小写字母,除非您拥有 Git 2.36(2022 年第二季度)。
" git diff --diff-filter=aR
" ( man )现在已正确解析。
请参阅Johannes Schindelin ( ) 的commit 75408ca、commit 4d4d4ea、commit d843e31(2022 年 1 月 28 日)。(由Junio C Hamano 合并 -- --在提交 9a16099中,2022 年 2 月 16 日)dscho
gitster
diff-filter
: 查找负位时要更加小心签字人:约翰内斯·辛德林
该
--diff-filter=<bits>
选项允许按某些标准过滤差异,例如R
仅显示重命名的文件。
它还支持通过小写字母否定过滤器,即
r
显示除重命名文件之外的所有内容。然而,当试图弄清楚(man)是否应该以所有差异过滤器打开时,代码有点过分热心,因为用户提供了一个小写字母:如果参数以大写字母开头,我们不能从打开所有位开始。
git diff
--diff-filter
更糟糕的是,可以在多个单独的选项中指定差异过滤器,例如
--diff-filter=AM [...] --diff-filter=m
.让我们独立地累积包含/排除过滤器,并且在完全解析选项后,只有“仅指定排除过滤器”的特殊情况。
更新:查尔斯·贝利接受的答案是正确的;所需的功能已经内置到 git 中。
我将把这个答案留在这里,因为它可能会为 git 未内置的东西提供想法。
git diff
通过比较它们来显示新的和删除的文件/dev/null
。/dev/null
编写一些东西(我自己会使用 Perl)来查找并过滤出以下几行直到下一个差异应该不会太难。然后git diff ... | the-filter
。
重命名的文件是另一回事;我(还)没有很好的答案。