Git 工作区、暂存区和版本库 - 图1

    工作区 就是你在电脑里能看到的目录。
    暂存区(stage 或 index 一般存放在 .git 目录下的 index 文件(.git/index)中,
    版本库
    对象库
    仓库
    理解成一个目录,这个目录里面的所有文件都可以被Git管理起来
    每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
    master 是 master 分支所代表的目录树。
    HEAD 指向 master 分支的一个”游标”。所以图示的命令中出现 HEAD 的地方可以用 master 来替换。
    git add 工作区→暂存区→对象库
    - 工作区:修改或新增了文件
    - 暂存区:更新了目录
    - 对象库:修改或新增的文件写入到新的对象中,对象的ID记录在暂存区的索引文件中。
    git commit 暂存区→版本库(对象库)
    暂存区的目录树写到版本库(对象库)中
    master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。
    git reset HEAD 暂存区→版本库(对象库)
    暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。
    git rm —cached 直接从暂存区删除文件,工作区则不做出改变。
    git checkout 用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区的改动。
    git checkout HEAD 用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。

    **