git diff不显示新文件

时间:2019-05-07 09:05:40

标签: git git-diff

我在工作树中创建了一个新文件file.txtgit 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)

但是,git diff什么也不显示。

$ git diff

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

git --no-pager diff file.txt

GITPAGER=cat git diff file.txt

具有相同的空结果。

如果我先添加文件,然后将其与HEAD进行比较,我将得到正确的比较。

$ 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

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

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

1 个答案:

答案 0 :(得分:2)

由于git在创建新文件时未对其进行跟踪,因此git无法识别已更改的内容。当您执行git add file时,文件将移至git的暂存区域,现在正在跟踪该文件。因此git diff将照常工作,因为git现在已具有有关文件的必需信息。

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

  

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

     

未跟踪的文件就是其他一切—您工作中的任何文件   不在上一个快照中且不在您的目录中的目录   暂存区。首次克隆存储库时,所有文件   将被跟踪和未修改,因为Git只是签出了它们,   您还没有编辑任何内容。

     

在编辑文件时,Git会将其视为已修改,因为您已更改   自您上次提交以来。工作时,您有选择地分阶段   修改的文件,然后提交所有这些阶段的更改,以及周期   重复。