git diff:比较工作区、暂存区、本地仓库之间的差异

本文转自https://blog.****.net/weixin_34275734/article/details/94566120

git diff:比较工作区、暂存区、本地仓库之间的差异

1、git的工作区:在当前仓库中,新增,更改,删除文件这些动作,都发生在工作区里面。

2、git的暂存区:英文叫stage, 或index。在版本库.git目录下,有一个index文件。它实际上就是一个包含文件索引的目录树,像是一个虚拟的工作区。在这个虚拟工作区的目录树中,记录了文件名、文件的状态信息(时间戳、文件长度等),文件的内容并不存储其中,而是保存在Git对象库(.git/objects)中,文件索引建立了文件和对象库中对象实体之间的对应。如果当前仓库,有文件更新,并且使用git add 命令,那么这些更新就会出现在暂存区中。

3、版本库:当前仓库下,如果没有任何的提交,那么版本库就是对应上次提交后的内容。 
版本库与工作区和暂存区的关系:

git diff:比较工作区、暂存区、本地仓库之间的差异

通过三个命令理解

下面还有一个需要注意的git diff 命令的差异:

  git diff 比较的是工作区和暂存区的差别
  git diff --cached 比较的是暂存区和版本库的差别
  git diff HEAD 可以查看工作区和版本库的差别

通过一个添加文件既可以明显看出他们之间区别,不过这里有一个前提是已经提交到暂存区的文件修改的时候才可以看出明显区别,这也是以为啥git只能跟着提交到暂存区的文件,如果只是在工作区新建一个文件,那么输入这三个命令都没有结果为空白。我们继续修改tgb.txt,在文件末尾添加  we are good boy.

 分别输入三个命令,效果为:

git diff:比较工作区、暂存区、本地仓库之间的差异

从图中可以看出,工作区与暂存区、工作区与版本库都有变化,而版本库与暂存区并没有变化。进一步执行git add tgb.txt 

git diff:比较工作区、暂存区、本地仓库之间的差异

 执行git add tgb.txt之后发现git diff没有输出内容,表明工作区与暂存区已经同步,暂存区与版本库、版本库与工作区没有同步。最后一步执行git commit 

git diff:比较工作区、暂存区、本地仓库之间的差异

当执行完git commit后,三个命令都没有输出结果,表明我们修改的文件已经被同步的版本库,已经被版本库管理起来了。