繁体   English   中英

为什么git diff --name-only不显示任何修改的文件?

[英]Why git diff --name-only does not show any modified files?

请注意(我正在使用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

请注意, git diff可以做很多不同的事情,包括(但不限于):

  • 比较一个提交与另一个提交
  • 比较对索引的任何提交
  • 比较对工作树的任何提交
  • 比较索引和工作树

就像您在编辑中指出的那样,您正在选择最后一个选项。

当您选择将索引与工作树进行比较时,要比较的文件列表完全由索引内容控制。 取消跟踪的所有文件将被完全忽略。 这与git status将索引与工作树比较的方式不同,但是由于git diff不必查找任何可能无法跟踪的文件(通常这是一个缓慢的操作),因此节省了大量时间。

如果您想让Git使用某种占位符的索引条目来知道文件的存在,请考虑使用git add --indent-to-add ,或者简称为git add -N (大写N)。 我还要提到的是这种状态(“假加”)是很长一段时间坏了,所以有许多的Git版本,它古怪的行为。 它也刚刚在2.19中更新,以更正git diff输出

  • “ git diff”比较索引和工作树。 对于添加了“意图添加”位的路径,该命令将显示已添加的全部内容,但路径本身未标记为新文件。 现在默认情况下它们显示为新的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM