Git-理论篇-三个区域和交互

Git中有很多特定的概念,在使用之前需要充分了解这些概念,才能更快更深入的学习Git的精髓。

三个区域

工作区(work directory)

一般就是我们项目的根目录。
这里写图片描述

版本库(repository)

我们在为项目添加本地库之后,会在工作区生成一个如下图所示的隐藏目录“.git”,.git目录即为当前工作区的本地版本库。
这里写图片描述

暂存区(stage)

版本库中设立一个暂存区(Stage or Index),作为用来直接跟工作区的文件进行交互,工作区文件的提交或者回滚首选都是通过暂存区,而版本库中除了暂存区之外,文件的提交的最终存储位置是分支(Branch),在创建版本库的时候默认都会有一个主分支(Master)。

三个区域空间如图所示
这里写图片描述

三个区域的交互

基本交互

交互图

这里写图片描述

相关命令

  • git add files:把当前工作文件拷贝到暂存区域。
  • git commit:在暂存区域生成文件快照并提交到本地仓库。
  • git reset – files:用来撤销最后一次 git add files;
  • git reset 撤销所有暂存区域文件;
  • git checkout – files:把文件从暂存区域覆盖到工作目录,用来丢弃本地修改。

其中,reset操作是将暂存区内选中的目标文件从暂存区中丢弃,不影响其他任何区域的文件,等同于一个自刷新的动作;

进阶交互

交互图

这里写图片描述

相关命令

  • git commit -a 等同于连续执行 git add 与 git commit,即先把文件从工作目录复制到暂存区,然后再从暂存区复制到仓库中;
  • git checkout HEAD – files 的过程刚好相反,将工作区和暂存区都同步至当前分支内的状态;也就是最后一次commit的状态;

区域间文件状态的差异

示意图

这里写图片描述

相关命令

  • git diff:查看尚未暂存的文件更新了哪些部分;即当前状态下工作区和暂存区之间的差异。
  • git diff –cached:查看已暂存文件和上次提交时的快照之间的差异;即当前状态下暂存区和分支内的差异。
  • git diff HEAD:查看未暂存文件与最新提交文件快照的区别;即当前状态下工作区和分支内的差异。