在执行git add后,git diff中没有显示文件。我如何知道它会被提交?

44

我有一个未被跟踪的文件,它在 git diff 中没有显示,在我将其添加到“要提交的更改”区域后,它仍然不会在 git diff 中显示。当我使用git status -v命令对比 HEAD 时,它会显示出来。

因为我对 git 还很陌生,请问一下,即使文件没有出现在常规的 diff 中,如果它已经被添加到暂存区,那么它是否会被提交?

5个回答

60

如果您想查看差异中的暂存更改,仍然可以使用git diff,只需传递--staged标志:

david@pav:~/dummy_repo$ echo "Hello, world" > hello.txt
david@pav:~/dummy_repo$ git status
# On branch master
#
# Initial commit
#
# Untracked files:
#   hello.txt
nothing added to commit but untracked files present
david@pav:~/dummy_repo$ git add hello.txt
david@pav:~/dummy_repo$ git diff
david@pav:~/dummy_repo$ git diff --staged
diff --git a/hello.txt b/hello.txt
new file mode 100644
index 0000000..76d5293
--- /dev/null
+++ b/hello.txt
@@ -0,0 +1 @@
+Hello, world
如果你只关心哪些文件被暂存了,当然可以运行git status,但是git diff --staged --name-only会把每个已经暂存的文件名单独列出来。

如果在此期间您对暂存文件进行更改,这些更改将显示在 git diff 中,而 git diff --staged 仅会显示暂存文件在暂存时的状态。 - DZet

38

要查看自上次提交以来工作树中所有更改(包括新文件),请使用:

git diff HEAD

在此处查看更多示例:git-diff


5

正如你所看到的,它会在 git status中显示,所以当你执行git commit时,它就会被提交。

你可能会发现使用一些可视化Git工具更方便,如gitx(Mac)或gitg(Linux),

它有漂亮的面板来显示暂存、未暂存等状态。

enter image description here

由于我当前没有该状态下的任何更改,因此我的截图看起来很简洁。


1
我想在David Cain的最佳答案中补充以下细微差别:该命令...
git diff --staged

...仅显示已暂存的更改(正如@rogerdpack所指出的那样)。

现在,如果您只想生成单个文件的差异,则我没有任何添加。但是,如果您想生成一个包含“自最新HEAD以来的所有更改”的差异文件,则可能应该(1.)暂存所有更改的文件,(2.)运行差异,(3.)取消暂存所有文件,如下所示:

git add -A
git diff --staged HEAD
git reset

不用说,记住这些命令会对所有之前暂存和未暂存的文件进行操作,所以如果你有很多临时文件,请小心使用。请参阅git diff手册页面获取更多信息。


1
如果您输入了 "git add __",该文件将包含在您的下一次提交中。当您运行 "git push" 时,此提交将被推送到服务器。

这个答案有什么用?如果你因为某些原因想手动打补丁怎么办?(不要回复“你为什么要这样做”,我有很多理由想这样做) - Stephen
@Stephen,这是我两年前写的答案,所以我猜测当时我的思考过程是什么。OP的帖子以问题“即使文件没有出现在常规diff中,因为它已被添加到暂存区,文件是否会被提交?”结束。这是对该问题的直接回答。 - tom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接