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