git diff 不显示新文件

Bal*_*nat 7 git git-diff

file.txt我在工作树中创建了一个新文件。git status正确显示了这一点:

$ git status
On branch mybranch
Untracked files:
  (use "git add <file>..." to include in what will be committed)

        file.txt

nothing added to commit but untracked files present (use "git add" to track)
Run Code Online (Sandbox Code Playgroud)

然而,git diff什么也没显示。

$ git diff

Run Code Online (Sandbox Code Playgroud)

我发现一些相关问题表明寻呼机可能有问题,所以我尝试了

git --no-pager diff file.txt
Run Code Online (Sandbox Code Playgroud)

GITPAGER=cat git diff file.txt
Run Code Online (Sandbox Code Playgroud)

具有相同的空结果。

如果我添加文件然后 diff 到 HEAD,我会得到正确的 diff。

$ git add file.txt
$ git diff --cached
diff --git a/file.txt b/file.txt
new file mode 100644
index 0000000..f2d7933
--- /dev/null
+++ b/file.txt
@@ -0,0 +1 @@
+asds
\ No newline at end of file
Run Code Online (Sandbox Code Playgroud)

这一切都在 Windows 10 和最新的 git 版本上。

为什么 diff 为空?通常,我不会太在意,但我使用的另一个工具依赖于 diff 输出。

Kra*_*inh 5

由于新文件在创建时不会被 git 跟踪,因此 git 无法识别发生了什么变化。当你这样做时git add file,文件移动到 git 的暂存区域,现在它正在被跟踪。因此 git diff 将照常工作,因为 git 现在拥有有关您的文件的所需信息。

\n\n

git文档提供了有关未跟踪文件的更多信息,如下所示 -

\n\n
\n

请记住,工作目录中的每个文件都可以处于两种状态之一:已跟踪或未跟踪。跟踪的文件是最后一个快照中的文件;它们可以是未修改的、修改的或分阶段的。简而言之,跟踪的文件是 Git 知道的文件。

\n\n

未跟踪的文件是工作目录中不在上次快照中且不在暂存区域中的所有文件。当您第一次克隆存储库时,您的所有文件都将被跟踪且不会被修改,因为 Git 刚刚签出它们并且您还没有编辑任何内容。

\n\n

当您编辑文件时,Git 会将它们视为已修改的文件,因为自上次提交以来您\xe2\x80\x99 已更改\n 它们。在工作时,您有选择地暂存这些已修改的文件,然后提交所有这些已暂存的更改,然后重复该循环。

\n
\n

  • 说 git 缺乏区分未跟踪字段所需的信息有点误导。git 知道索引在该路径上“没有内容”,并且*可以*将文件与该路径进行比较 - 就像它根据索引比较未暂存的更改一样,即使(事实上,因为)它们尚未添加。git 不会在 diff 中显示未跟踪的文件是一个设计决定,仅此而已。 (3认同)