记录笔记关于工作区,暂存区,及版本库之间的区别和联系,书籍《Git权威指南》

联系及区别

.git文件夹(版本库)下的index文件实际上是一个包含文件索引的目录树,在此目录树中记录了文件名及文件的状态信息(文件长度和时间戳等信息)。注意,文件的内容并没有存储在目录树中,而是保存在.git目录下的object目录(对象库)中,通过这种方式文件和对象库中的对象实体之间产生了对应的联系。

git-stage-area-show

注: HEAD其实是版本库的头指针,一个游标,一般指向当前分支的最新提交,当指向的不是最新提交时就会处于游离状态,此图中的HEAD可以用分支master来代替

常用指令所产生的变化

  • git add:暂存区(index)的目录树更新(增加文件索引或修改相应文件记录长度时间戳等),同时工作区修改(或新增)的文件内容会被写入到对象库中的一个新对象中,同时将该对象的索引ID记录在暂存区的文件索引中
  • git commit:暂存区的目录树会写入到版本库(对象库)中,master分支做相应的更新,指向的目录树即暂存区提交时指向的目录树
  • git reset HEAD:暂存区的目录树被重写,会被master指向的目录树替换,但工作区不受影响
  • git rm --cached <file>:暂存区文件移除,目录树更新,工作区不改变
  • git checkout <file>:使用暂存区全部文件替换工作区,即清楚工作区内未提交到暂存区的改动
  • git checkout HEAD <file>:用当前HEAD指向的分支(此处是master)的目录树替换暂存区及工作区的文件,未提交的改动会被清除