git HEAD和当前项目状态之间的区别?

nev*_*ame 46 git

我引用一个git教程:

git diff shows the diff between HEAD and the current project state
Run Code Online (Sandbox Code Playgroud)

我想知道这意味着什么.HEAD不是目前活跃的项目吗?

谢谢

Von*_*onC 110

从" 指定修订 "

HEAD 命名您基于工作树中的更改的提交.

还有其他头(FETCH_HEAD,ORIG_HEADMERGE_HEAD).请参阅Jefromi的答案.

问题是,默认情况下git diff实际显示"项目的当前状态"(即工作树上的文件)和索引(不是HEAD)之间的差异.
换句话说,差异是你可以告诉git进一步添加到索引但你还没有.

如果你这样做git diff --cached,那么它会将索引与HEAD进行比较.

有关更多信息,请参阅git book(存档链接):

一个常见的用途就是简单地运行

$ git diff
Run Code Online (Sandbox Code Playgroud)

这将显示工作目录中尚未为下一次提交暂存的更改.如果要查看下一次提交的暂存内容,可以运行

$ git diff --cached
Run Code Online (Sandbox Code Playgroud)

这将显示索引和上次提交之间的区别; 如果你在没有"-a"选项的情况下运行"git commit",你会提交什么.(在Git版本1.6.1及更高版本中,您也可以使用git diff --staged哪些可能更容易记住.)最后,您可以运行

$ git diff HEAD
Run Code Online (Sandbox Code Playgroud)

它显示自上次提交以来工作目录中的更改; 如果你运行"git commit -a",你会提交什么.

另请参见365git:在工作树和其他提交之间获取差异:

http://images.abizern.org.s3.amazonaws.com/365git/Feb11/Git%20Diff%202.png

  • 令人敬畏的链接,在使用git的3年中,我还没有看到一个能够很好地解释东西的单个图像.与链接图像提供的简单性相比,官方git图像是可怕的.博客上的所有其他图像似乎都相当可怕.我的意思是官方的git图像是相当的图像系列,仍然留有解释空间,而你的帖子中的图像只解释了1个图像中的5个不同的命令.这是效率的反转,每个命令5个图像比较每个图像5个命令. (3认同)