【发布时间】:2018-06-10 21:05:21
【问题描述】:
git-diff-files(1) 的文档说
仅选择已添加 (A)、已复制 (C)、已删除 (D)、已修改 (M)、已重命名 (R) 的文件,其类型(即常规文件、符号链接、子模块……)已更改(T )、未合并 (U)、未知 (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.txt和2.txt他们的D/M状态会覆盖A状态。3.txt根本没有添加,它是未跟踪的文件。 -
我承认在这种情况下,
3.txt未被跟踪。我将“未跟踪”表示不在索引中的文件(由git ls-files -o列出的文件)。尽管指令的文本暗示 --diff-filter=A 将显示3.txt,因为它在工作树和索引的区别在于,相对于索引,工作树中的文件是“添加”的。简而言之,git diff-files在什么情况下会将文件显示为“A”? -
我以为你需要
git add 3.txt,但我自己尝试过,但我自己无法获得A的状态。
标签: git