我有一个未被跟踪的文件,它在 git diff 中没有显示,在我将其添加到“要提交的更改”区域后,它仍然不会在 git diff 中显示。当我使用git status -v
命令对比 HEAD 时,它会显示出来。
因为我对 git 还很陌生,请问一下,即使文件没有出现在常规的 diff 中,如果它已经被添加到暂存区,那么它是否会被提交?
我有一个未被跟踪的文件,它在 git diff 中没有显示,在我将其添加到“要提交的更改”区域后,它仍然不会在 git diff 中显示。当我使用git status -v
命令对比 HEAD 时,它会显示出来。
因为我对 git 还很陌生,请问一下,即使文件没有出现在常规的 diff 中,如果它已经被添加到暂存区,那么它是否会被提交?
如果您想查看差异中的暂存更改,仍然可以使用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 status
中显示,所以当你执行git commit
时,它就会被提交。
你可能会发现使用一些可视化Git工具更方便,如gitx(Mac)或gitg(Linux),
它有漂亮的面板来显示暂存、未暂存等状态。
由于我当前没有该状态下的任何更改,因此我的截图看起来很简洁。
git diff --staged
...仅显示已暂存的更改(正如@rogerdpack所指出的那样)。
现在,如果您只想生成单个文件的差异,则我没有任何添加。但是,如果您想生成一个包含“自最新HEAD以来的所有更改”的差异文件,则可能应该(1.)暂存所有更改的文件,(2.)运行差异,(3.)取消暂存所有文件,如下所示:
git add -A
git diff --staged HEAD
git reset
不用说,记住这些命令会对所有之前暂存和未暂存的文件进行操作,所以如果你有很多临时文件,请小心使用。请参阅git diff手册页面获取更多信息。
git diff
中,而git diff --staged
仅会显示暂存文件在暂存时的状态。 - DZet