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

时间:2011-08-01 04:50:25

标签: git git-diff

有时会有一些已更改的文件以及一些新的,已删除和/或重命名的文件。在执行git diffgit-log时,我想省略它们,因此我可以更好地发现修改。

实际上,在没有内容的情况下列出新文件和已删除文件的名称是最好的。对于“旧”重命名为“新”,我想选择性地区分“旧”和“新”。

3 个答案:

答案 0 :(得分:187)

--diff-filter选项适用于diff和日志。

我经常使用--diff-filter=M将diff输出限制为仅内容修改。

要检测重命名和副本并在diff输出中使用这些,您可以分别使用-M-C以及RC选项--diff-filter 1}}。

答案 1 :(得分:37)

  • 官方文件:
--diff-filter=[(A|C|D|M|R|T|U|X|B)…​[*]]
     

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

     

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

     

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

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

git diff --diff-filter=ACM

答案 2 :(得分:-3)

更新: Charles Bailey的accepted answer是正确的;所需的功能已经内置到git中。

我会在这里留下这个答案,因为它可能会为没有内置到git中的内容提供想法。


git diff通过将新文件与/dev/null进行比较来显示新文件和已删除文件。写一些东西(我自己使用Perl)寻找/dev/null并将以下几行过滤到下一个差异应该不会太难。然后是git diff ... | the-filter

重命名文件是另一回事;我(还)没有很好的答案。