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