如何让git-diff和git log忽略新的和删除的文件?
有时会有一些更改的文件以及一些新的,删除和/或重命名的文件。 在做git diff
或者git-log
我想省略它们,所以我可以更好地发现修改。
实际上,列出没有内容的新文件和删除文件的名称是最好的。 对于“旧”更名为“新”,我想select“旧”和“新”之间的区别。
--diff-filter
diff
选项可以同时用于diff
和log。
我使用 – --diff-filter=M
很多限制差异输出只有内容修改。
要检测重命名和复制并在diff输出中使用它们,可以分别使用-M
和-C
,并将R
和C
选项与--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
。
重命名文件是另一回事。 我还没有一个很好的答案。