请注意(我正在使用posh-git):
C:\xyz\git [master ↑2 +27 ~0 -0 !]> git diff --name-only
C:\xyz\git [master ↑2 +27 ~0 -0 !]>
27个文件夹处于未登台状态,每个文件夹都有一些文件。没有进行任何更改。
为什么不显示任何文件?
编辑1
以下简单的脚本演示了该问题:
C:\xyz> mkdir git
Directory: C:\xyz
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 10/16/2018 1:20 PM git
C:\xyz> cd git
C:\xyz\git> git init
Initialized empty Git repository in C:/xyz/git/.git/
C:\xyz\git [master]> echo hello > 1.txt
C:\xyz\git [master +1 ~0 -0 !]> git diff --name-only
C:\xyz\git [master +1 ~0 -0 !]> git status
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
1.txt
nothing added to commit but untracked files present (use "git add" to track)
C:\xyz\git [master +1 ~0 -0 !]>
编辑2
根据https://git-scm.com/docs/git-diff:
git diff [<options>] [--] [<path>…]
此表格用于查看更改 您相对于索引(下一次提交的暂存区域)所做的。在 换句话说,差异就是您可以告诉Git进一步的区别 添加到索引中,但您还没有。您可以通过以下方式进行这些更改 使用git-add [1]。
据我所知,这意味着上面记录中的git diff --name-only
命令应列出1.txt
答案 0 :(得分:2)
请注意,git diff
可以做很多不同的事情,包括(但不限于):
正如您刚刚在编辑中指出的那样,您正在选择最后一个选项。
当您选择将索引与工作树进行比较时,要比较的文件列表完全由索引内容控制。 未跟踪的所有文件将被完全忽略。这不同于git status
将索引与工作树进行比较的方式,但是为git diff
节省了很多时间,因为它不必查找任何可能无法跟踪的文件(通常这很慢操作)。
如果您希望Git使用某种占位符的索引条目来知道文件的存在,请考虑使用git add --indent-to-add
,或者简称为git add -N
(大写N)。我还应该提到,这种状态(“伪造的”)已经打破了很长时间,因此Git的许多版本在行为上都很奇怪。也是just updated in 2.19 to correct the git diff
output:
- “ git diff”比较索引和工作树。对于路径 添加了intent-to-add位后,该命令将显示全部内容 其中已添加,但路径本身未标记为新路径 文件。现在默认情况下它们显示为新的。