git-diff文件的效果是什么——diff-filters=A?

git-diff文件的效果是什么——diff-filters=A?,git,Git,该文件的内容如下: 仅选择添加(A)、复制(C)、删除(D)、修改(M)、重命名(R)、类型(即常规文件、符号链接、子模块等)更改(T)、未合并(U)、未知(X)或配对已中断(B)的文件 但是,以下命令不显示添加的文件(不要在包含源文件子目录的目录中运行此命令): 输出如下所示: $ git diff-files --diff-filter=ADM :100644 100644 e69de... 0000... M 1.txt :100644 000000 0cfbf... 0000.

该文件的内容如下:

仅选择添加(A)、复制(C)、删除(D)、修改(M)、重命名(R)、类型(即常规文件、符号链接、子模块等)更改(T)、未合并(U)、未知(X)或配对已中断(B)的文件

但是,以下命令不显示添加的文件(不要在包含
源文件
子目录的目录中运行此命令):

输出如下所示:

$ git diff-files --diff-filter=ADM
:100644 100644 e69de... 0000... M      1.txt
:100644 000000 0cfbf... 0000... D      2.txt

git diff文件
是否从不显示添加的文件?
diff-filter
选项表明它能够选择添加的文件。

事实上
git-diff-files
永远不会显示添加的文件

diff files
命令显示索引与工作副本中的文件之间的差异。根据定义,尚未添加到索引的文件(通过
git add
)将不属于索引的一部分,因此不能显示在索引和工作副本之间的任何差异中。只需将文件添加到索引中,将使文件在索引和工作副本中完全相同,因此索引和工作副本之间不会有任何差异,因此也不会显示在
diff files
中。修改工作副本中添加的文件将直接导致
M
状态

文档显示所有可能的
--diff-filter
参数的原因是,diff-options文档在接受diff-options的所有命令之间共享(
diff-files
diff-index
diff-tree
格式补丁
log
show
)。它们各自的文档仅包括
diff选项
文档:

include::diff-options.txt[]
例如,可以在中看到。通用的
diff选项
则具有共享的
--diff过滤器
文本

由于这些文件是在构建文档时处理的,因此

ifndef::git-format-patch[]

--diff-filter
文档上方的一行中,可以想象
diff-files
命令的文本可能会有所不同(或者增加以说明某些参数不适用的事实)。为此更改向git项目打开错误报告可能是有意义的。

我认为对于
1.txt
2.txt
它们的
D/M
状态覆盖了
a
3.txt
尚未添加,它是未跟踪的文件。我承认在这种情况下,
3.txt
未跟踪。我认为“untracked”是指不在索引中的文件(由
gitls files-o
列出的文件)。尽管指令的文本暗示--diff filter=a将显示
3.txt
,因为它在工作树和索引之间是不同的,区别在于相对于索引,工作树中的文件是“添加”的。简而言之,在什么条件下,
git diff files
会将文件显示为“a”?我以为您需要
git add 3.txt
,但我自己尝试过,自己无法获得状态
a
。回答得很好。我没有想到要看git源代码来理解文档。事实上,我从未想过使用代码生成文档,以及人们如何使用git log--diff filter=A来查找创建文件的提交位置。
ifndef::git-format-patch[]