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

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

实际上,列出没有内容的新文件和删除文件的名称是最好的。 对于“旧”更名为“新”,我想select“旧”和“新”之间的区别。

--diff-filter diff选项可以同时用于diff和log。

我使用 – --diff-filter=M很多限制差异输出只有内容修改。

要检测重命名和复制并在diff输出中使用它们,可以分别使用-M-C ,并将RC选项与--diff-filter一起使用。

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

select仅添加(A),复制(C),删除(D),修改(M),重命名(R),其types(即常规文件,符号链接,子模块,…)改变(T)的文件, (U),未知(X)或配对破碎(B)。 可以使用任何过滤字符的组合(包括无)。

将*(全或无)添加到组合中时,如果有任何文件与比较中的其他条件匹配,则select所有path; 如果没有与其他标准匹配的文件,则不会select任何内容。

而且,这些大写字母可以被降低以排除。 例如–diff-filter = ad排除添加和删除的path。

示例:显示只添加,更改,修改的文件排除删除的文件:

 git diff --diff-filter=ACM 

更新: Charles Bailey 接受的答案是正确的。 所需的function已经内置到git中。

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


git diff通过将它们与/dev/null进行比较来显示新的和删除的文件。 写一些东西(我自己会用Perl)应该不会太困难,它会查找/dev/null ,并将以下代码行过滤到下一个diff。 然后git diff ... | the-filter git diff ... | the-filter

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