关于git diff的问题

关于git diff的问题,git,git-diff,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

我被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似乎在没有参数的情况下无法工作——缓存,是吗?

不,这都是关于暂存区域的。请在此处阅读更多信息为此,
git add
有两种含义:

  • 如果文件尚未跟踪,则开始跟踪它,并将其放入暂存区域
  • 如果文件已被跟踪,请将其放入暂存区域
  • 因此,当您在创建文件之后
    git diff
    时,您什么也看不到。然后,当您添加它时,因为它也是直接分段的,所以您不会用
    git diff
    看到它,而是用
    git diff--cached
    看到它

    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,您将看到暂存区域和当前头部之间的差异

    因为它主要是关于git diff如何与临时区域交互的。也是开始使用git的优秀在线资源

    编辑:
    Git book entry on.

    Git diff HEAD与“Git diff--cached”的工作方式是否相同?Yes HEAD是“当前分支尖端的SHA id”的缩写。您可以为diff任意提交提供
    git diff
    两个树(请参阅我在答案中添加的链接),无参数默认值为
    。有一个参数,第二个默认值是工作副本。哦,我错了,它不太一样
    git diff HEAD
    还将显示工作副本和HEAD之间的差异
    git diff--cached
    将只显示暂存区和标头之间的差异。+1:git diff手册页上说(第一项,没有任何可选参数)“此表单用于查看您[在工作目录中]相对于索引(暂存区…)所做的更改”,因此Simon给出了信息性的答案。