索引如何影响“git diff”的输出?

时间:2016-06-14 14:18:24

标签: git

索引是临时区域吗?

来自git docs:

  

git diff

     

让我们停一分钟,看看如何使用git diff命令   向您展示工作中文件的版本之间的区别   目录,索引和最近提交。 git diff的3种主要类型   您可能会使用的命令是:

     

git diff:显示工作目录和。之间的差异   指数。
  git diff -cached:显示索引和。之间的差异   最近的承诺   git diff HEAD:显示你的差异   工作目录和最近的提交。

我的问题是关于git diff。问题是我没有提交任何内容或git add任何内容,当我输入git diff时,我的工作目录中的更改会显示出来。我的临时区域是空的。当我输入git status时,我看到两个红色的文件不会被暂存,因为我还没有使用git add。那么为什么git diff显示我在工作目录中所做的更改?

1 个答案:

答案 0 :(得分:4)

  

git diff:显示工作目录和索引之间的差异。

工作目录:您当前的代码,甚至是尚未暂存的文件。

索引:你是对的,这是暂存区。

当您执行git diff时,它会将您当前的代码与暂存区域进行比较,这正是您所描述的行为。

来自git文档:

  

git diff

     

此表单用于查看您对索引所做的更改(下一次提交的暂存区域)。换句话说,差异是你可以告诉Git进一步添加到索引,但你仍然没有。您可以使用git-add [1]来暂存这些更改。

因此,我们有三种不同的情况:

1 - 您没有未上演的更改 - > git diff没有显示任何内容。

2 - 你有一些变化上演,一些没上演 - > git diff显示您的CWD和临时区域之间的差异。

3 - 舞台区域为空,有些变化 - > git diff显示CWD和最后一次提交之间的差异。