有时会有一些已更改的文件以及一些新的,已删除和/或重命名的文件。在执行git diff
或git-log
时,我想省略它们,因此我可以更好地发现修改。
实际上,在没有内容的情况下列出新文件和已删除文件的名称是最好的。对于“旧”重命名为“新”,我想选择性地区分“旧”和“新”。
答案 0 :(得分:187)
--diff-filter
选项适用于diff
和日志。
我经常使用--diff-filter=M
将diff输出限制为仅内容修改。
要检测重命名和副本并在diff输出中使用这些,您可以分别使用-M
和-C
以及R
和C
选项--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
。
重命名文件是另一回事;我(还)没有很好的答案。