如何让git-diff和git log忽略新的和删除的文件?

maa*_*nus 144 git git-diff

有时会有一些已更改的文件以及一些新的,已删除和/或重命名的文件.在做git diff或者git-log我想省略它们时,我可以更好地发现修改.

实际上,列出新文件和已删除文件的名称是最好的.对于"旧"重命名为"新"我想选择性地区分"旧"和"新".

CB *_*ley 199

--diff-filter选项适用于diff和log.

我使用--diff-filter=M很多将diff输出限制为仅内容修改.

要检测重命名和副本并在diff输出中使用它们,可以分别使用-M和和选项-C一起使用.RC--diff-filter

  • @Kamil是的,有.从文档中引用:`此外,这些大写字母可以向下翻译以排除.例如--diff-filter = ad排除添加和删除的路径 (17认同)
  • 有没有办法实际排除一种类型的数据?像`--diff-filter =!D`之类的东西 (7认同)
  • 当与`git log`一起使用时,这将导致它完全忽略仅添加和/或删除文件的提交. (3认同)

Tee*_*ker 50

  • 官方文件:
--diff-filter=[(A|C|D|M|R|T|U|X|B)…?[*]]
Run Code Online (Sandbox Code Playgroud)

仅选择已添加(A),复制(C),删除(D),修改(M),重命名(R)的文件,其类型(即常规文件,符号链接,子模块,...)已更改(T),是未合并(U),未知(X),或已配对破碎(B).可以使用过滤器字符的任何组合(包括无).

当*(全部或全部)添加到组合中时,如果有任何文件与比较中的其他条件匹配,则选择所有路径; 如果没有与其他条件匹配的文件,则不会选择任何内容.

此外,这些大写字母可以降级为排除.例如--diff-filter = ad排除添加和删除的路径.

示例:仅显示添加,更改,修改的文件,不包括已删除的文件:

git diff --diff-filter=ACM
Run Code Online (Sandbox Code Playgroud)

  • 关于使用小写字母选项排除路径和使用大写字母选项包含路径的好注意事项。 (5认同)

Von*_*onC 7

此外,这些大写字母可以小写以排除。
例如,--diff-filter=ad排除添加和删除的路径。

在您的情况下,git diff --diff-filter=ad可以,但请确保不要在同一过滤器中使用小写和大写字母,除非您有 Git 2.36(2022 年第 2 季度)。

现在可以正确解析“ git diff --diff-filter=aR( man ) 。

请参阅Johannes Schindelin ( )的提交 75408ca提交 4d4d4ea提交 d843e31(2022 年 1 月 28 日)。(由Junio C Hamano 合并 -- --提交9a16099,2022年 2 月 16 日)dscho
gitster

diff-filter:寻找负位时要更加小心

签署人:约翰内斯·辛德林

--diff-filter=<bits>选项允许按某些条件过滤差异,例如R仅显示重命名的文件。
它还支持通过小写字母否定过滤器,即
r显示除重命名文件之外的所有内容

然而,当试图弄清楚( man )是否应该在所有 diff-filters 打开的情况下开始时,代码有点过于热心,因为用户提供了一个小写字母:如果参数以大写字母开头,我们不能首先打开所有位。git diff--diff-filter

更糟糕的是,可以在多个单独的选项中指定 diff 过滤器,例如--diff-filter=AM [...] --diff-filter=m

让我们独立累积包含/排除过滤器,并且在完全解析选项后仅处理“仅指定排除过滤器”的特殊情况。