我在工作树中创建了一个新文件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)
但是,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输出。
答案 0 :(得分:2)
由于git在创建新文件时未对其进行跟踪,因此git无法识别已更改的内容。当您执行git add file
时,文件将移至git的暂存区域,现在正在跟踪该文件。因此git diff将照常工作,因为git现在已具有有关文件的必需信息。
git docs提供了有关未跟踪文件的更多信息,如下所示-
请记住,工作目录中的每个文件都可以位于两个文件之一中 状态:已跟踪或未跟踪。跟踪文件是指 最后快照;它们可以不修改,修改或上演。简而言之, 跟踪文件是Git知道的文件。
未跟踪的文件就是其他一切—您工作中的任何文件 不在上一个快照中且不在您的目录中的目录 暂存区。首次克隆存储库时,所有文件 将被跟踪和未修改,因为Git只是签出了它们, 您还没有编辑任何内容。
在编辑文件时,Git会将其视为已修改,因为您已更改 自您上次提交以来。工作时,您有选择地分阶段 修改的文件,然后提交所有这些阶段的更改,以及周期 重复。