一、可以将git简单的分为三个区域
1、工作区(working directory)
2、暂缓区(stage index)
3、历史记录区(history)
如图所示:
其中git add files把当前目录中的文件放入暂存区域,这其实做了两件事:
1、将本地文件的时间戳、长度,当前文档对象的id等信息保存到一个树形目录中去(index,即平时说的暂存区)
2、将本地文件的内容做快照并保存到Git 的对象库 。
综上2点来说,暂存区实际上就是一个包含文件索引的目录树,像是一个虚拟的工作区。在这个虚拟工作区的目录树中,记录了文件名、文件的状态信息(时间戳、文件长度等),文件的内容并不存储其中,而是保存在 Git 对象库(.git/objects)中,文件索引建立了文件和对象库中对象实体之间的对应。 如图所示:
在这个图中,我们可以看到部分 Git 命令是如何影响工作区和暂存区(stage, index)的:
图中左侧为工作区,右侧为版本库。在版本库中标记为 "index" 的区域是暂存区(stage, index),标记为 "master" 的是 master 分支所代表的目录树。
图中我们可以看出此时 "HEAD" 实际是指向 master 分支的一个“游标”。所以图示的命令中出现 HEAD 的地方可以用 master 来替换。
图中的 objects 标识的区域为 Git 的对象库,实际位于 ".git/obje