git diff-files的效果是什么--diff-filters = A?

时间:2017-12-31 01:35:46

标签: git

git-diff-files(1)的文档说

  

仅选择已添加(A),复制(C),删除(D),修改(M),重命名(R)的文件,使其类型(即常规文件,符号链接,子模块,...)更改(T) ),Unmerged(U),Unknown(X),或已经配对破碎(B)......

但是,以下命令不会显示添加的文件(不要在具有origin子目录的目录中运行此文件):

start=$PWD
origin="$start/origin"

rm -rf $origin
mkdir $origin
cd $origin
touch 1.txt
echo "2" > 2.txt
git init
git add -A
git commit -m "init"

echo "1" > 1.txt
rm 2.txt
echo "3" > 3.txt
git diff-files --diff-filter=ADM

输出如下:

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

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

1 个答案:

答案 0 :(得分:3)

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

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

文档显示所有可能的--diff-filter参数的原因是diff选项文档在所有采用diff选项的命令之间共享(diff-filesdiff-index,{ {1}},diff-treeformat-patchlog)。他们各自的文档只包含show文档:

diff-options

例如,见this line of the git-diff-files documentation source。然后,公共include::diff-options.txt[] 具有共享的diff-options文字starting here

由于在构建文档时会处理这些文件,如条件

所示
--diff-filter

ifndef::git-format-patch[] 文档上方的行中,可以想象可以为--diff-filter命令改变文本(或者扩充以说明某些参数不适用的事实)。向git项目打开错误报告以进行此更改可能有意义。