1

我对 git diff 的输出感到困惑

echo "hello">>welcome.txt
git diff

为什么没有输出?

git add welcome.txt
git diff

为什么没有输出?

git diff --cached
diff --git a/welcome.txt b/welcome.txt
new file mode 100644
index 0000000..ce01362
--- /dev/null
+++ b/welcome.txt
@@ -0,0 +1 @@
+hello

为什么现在输出?

似乎没有参数--cached git diff 不起作用,是吗?

4

3 回答 3

1

为此,git add有两层含义:

  1. 如果文件还没有被跟踪,就开始跟踪它把它放在暂存区
  2. 如果文件已被跟踪,则将其放在暂存区

因此,当您git diff刚刚创建文件后,您什么也看不到。然后当你添加它时,由于它也是直接 stagged,所以你看不到它,git diff但你看到它git diff --cached.

于 2011-08-29T11:55:30.450 回答
1

场景一:

echo "hello">>welcome.txt
git diff

造成混淆的原因主要是您正在创建一个尚未在 git 中的新文件。此处文件 welcome.txt 不在 git 存储库中,因此 git 对其历史一无所知。如果已经提交了以前版本的welcome.txt,您会在这种情况下看到差异。

场景二:

git add welcome.txt
git diff

在这种情况下,您已将文件添加到暂存区。就 git diff 而言,这有效地提交了文件,并且 git diff 只会向您显示工作副本与暂存区域中的welcome.txt 版本之间的差异。

场景 3:

正如您所看到的,就 git diff 而言,暂存文件与提交文件并不完全正确。您仍然可以通过 --cached 并且您将看到暂存区和当前 HEAD 之间的差异。

正如西蒙所说,这主要是关于 git diff 如何与暂存区交互。 Pro Git也是一个很好的 git 入门在线资源。

编辑:关于treeishes的 Git 书籍条目。

于 2011-08-29T12:01:15.637 回答
0

不,这都是关于暂存区的。在此处阅读更多信息http://gitready.com/beginner/2009/01/18/the-staging-area.html

于 2011-08-29T11:52:25.790 回答