这些git diff命令有什么区别?
以下git命令有什么区别?
- git diff HEAD
-  git diff HEAD^
-   git diff --cached或同义词git diff --staged
-  git diff
-   git diff HEAD– 显示自上次提交以来更改的内容。
-   git diff HEAD^– 显示自从最近一次提交之前的提交后发生了什么变化。
-   git diff --cached– 通过git add显示已添加到索引的内容,但尚未提交。
-   git diff– 显示已经改变,但还没有通过git add添加到索引。
它看起来像这样:
  Working Directory <----+--------+------+ | | | | | | | | V | | | "git add" | | | | diff | | | | | | V | | | Index <----+ diff HEAD | | | | | | | | | V | | | "git commit" | | | | diff --cached | | | diff --staged | | V | | | HEAD <----+--------+ | | | | diff HEAD^ V | previous "git commit" | | | | | V | HEAD^ <--------------------+ 
从Git社区图书 :
 git diff 
会显示工作目录中尚未执行下一个提交的更改。
 git diff --cached 
会告诉你索引和上次提交之间的区别; 如果你运行“git commit”而没有“-a”选项,你将会提交什么。
 git diff HEAD 
显示自上次提交以来工作目录中的更改; 如果你运行“git commit -a”你会提交什么。
-   git diff HEAD:HEAD和工作目录之间的git diff HEAD。
-   git diff HEAD^:git diff HEAD^的直接祖先和工作目录之间的git diff HEAD^。
-   git diff --cached或同义词git diff --staged:HEAD和索引之间的git diff --staged。
-   git diff:索引和工作目录之间的git diff。
以下是记住这些命令的简单方法:
-  默认情况下, git diff的源被假定为工作目录,其目标是索引。
-  添加--cached标志会将源更改为索引。 一旦添加更多参数,它不一定会改变目标。 但是为了方便,如果没有提供,目标将成为最后的提交。
- 添加提交作为参数改变目标。
- 添加两个提交作为参数分别改变源和目标。
玩得开心,把它们混合到你自己喜欢的地方:)
  HEAD是树中当前的HEAD指针, HEAD^是HEAD之前的提交。  --cached我不确定。--cached将显示您所做的任何更改,但尚未添加到索引中。 
kernal.org上的git教程是一个很好的阅读。