已修改

已暂存, staged, 对修改的文件做了标记, 使之包含在下次提交的快照中

暂存区域是一个文件,保存了下次将提交的文件列表信息,一般在 Git 仓库目录中。 有时候也被称作“索引”,不过一般说法还是叫暂存区域。

暂存操作会为每一个文件计算校验和(使用我们在 起步 中提到的 SHA-1 哈希算法),然后会把当前版本的文件快照保存到 Git 仓库中(Git 使用 blob 对象来保存它们),最终将校验和加入到暂存区域等待提交

已提交

git commit 进行提交操作时

Git 会先计算每一个子目录(本例中只有项目根目录)的校验和,然后在 Git 仓库中这些校验和保存为树对象

Git 便会创建一个提交对象,它除了包含上面提到的那些信息外,还包含指向这个树对象(项目根目录)的指针

在索引(暂存)时, 就会对文件内容生成blob 对象(相当于对工作区有个复制, 然后Git 化)

这些对象以扁平的清单实现, 并没有树的概念

在提交时, 会生成文件对象的目录结构

把目录结构放在tree object 中, 以及文件内容(blob object) 的引用

把提交历史信息和本次提交的用户信息以及描述信息存放在commit object 中

然后修改分支的值, 使其指向最新的commit object

索引(暂存), 就是一版历史记录的子集, 提交的动作就是补齐这一版历史记录的其它部分