这些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教程是一个很好的阅读。