提交对象
commit
可能是 git
用户最熟悉的 object
类型,因为它是用于使用 git commit
命令创建的。
但是,commit
不直接包含任何已更改的文件或数据。相反,它主要包含元数据和指向其他 objects
的指针,其中包含 commit
的实际内容。
一个 commit
包含一些东西:
- tihuan 的哈希
- 父母
commit
的哈希 - 作者姓名/电子邮件,委员姓名/电子邮件
- 提交消息
你可以看到任何提交的内容,如下所示:
$ git cat-file commit 5bac93
tree 04d1daef...
parent b7850ef5...
author Geddy Lee <glee@rush.com>
commiter Neil Peart <npeart@rush.com>
First commit!
树
一个非常重要的注意事项是 tree
对象存储项目中的每个文件,并且它存储的所有文件都不是差异。这意味着每个 commit
都包含整个项目*的快照。
* 从技术上讲,只存储已更改的文件。但这更像是效率的实施细节。从设计角度来看,commit
应被视为包含项目的完整副本。
亲
parent
行包含另一个 commit
对象的散列,可以被认为是指向先前提交的父指针。这隐式地形成了一个称为提交图的提交图。具体来说,它是一个有向无环图 (或 DAG)。