关于git diff的问题

时间:2011-08-29 11:48:31

标签: git git-diff

我对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

为什么现在输出?

似乎git diff在没有参数的情况下不起作用--cached,是吗?

3 个答案:

答案 0 :(得分:1)

为此,git add有两个含义:

  1. 如果尚未跟踪该文件,请开始跟踪将其放入暂存区域
  2. 如果已跟踪文件,请将其放在暂存区域
  3. 因此,当您在创建文件后git diff时,您看不到任何内容。然后,当您添加它时,由于它也直接停滞,您在git diff时看不到它,但是您会看到它git diff --cached

答案 1 :(得分:1)

情景1:

echo "hello">>welcome.txt
git diff

混淆的原因主要是你正在创建一个尚未存在于git中的新文件。 这里的文件welcome.txt不在git仓库中,所以git对它的历史记录一无所知。如果已经提交了以前版本的welcome.txt,那么您将看到这种情况的不同之处。

情景2:

git add welcome.txt
git diff

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

情景3:

正如你所看到的那样,相当是真的,就git diff而言,暂存文件与提交文件是一样的。您仍然可以传递--cached,您将看到暂存区域和当前HEAD之间的差异。

作为Simon said,它主要是关于git diff如何与临时区域进行交互。 Pro Git也是开始使用git的优秀在线资源。

编辑: Git书籍条目treeishes

答案 2 :(得分:0)

不,这都是关于临时区域的。在这里阅读更多http://gitready.com/beginner/2009/01/18/the-staging-area.html