提交对象

1

运行了git commit命令之后,Git仓库里会创建一个新的提交对象,这个提交对象至少包括这些东西:

  • 提交时表示暂存区状态的树对象的哈希值,也就是下面图3的哈希值 39179a1。
  • 提交者,包括名字、邮箱地址和日期。
  • 提交说明

提交对象也有哈希值

因为提交对象是对象数据库的一部分,它们不仅有哈希值,也被一个哈希值所引用。

提交对象举例

前面聊过了树对象,所谓提交对象也无非是提供一个指向 树对象的指针再加上一些类似于时间、人物、动机的 metadata。

2

这张图是没有提交对象的树对象。

3

这张图有提交对象。可以看到,提交对象包括一个指向树对象顶层哈希值的 tree 属性和一些 metadata。而 HEAD 指针又指向当前分支的最新提交。

父提交对象

一个提交对象可能还有父提交:

  • 第一次向一个仓库提交代码,该提交对象没有父提交。
  • 如果一个提交对象有两个以上的父提交,说明发生了合并。

提交的作者

一个提交的作者(author)和提交者(committer)是不一样的。作者是指写这份代码的人,而提交者可能是管理仓库的人。

添加一个文件并提交

4

这里添加了一个文件夹 test,下面有一个文件 plan。在运行git commit之后,会生成一个新的提交对象,这个对象指向一个新生成的树对象,这个树对象包含了所有的文件。与此同时,HEAD 的指向也发生了变化,指向了新的提交对象。

总结

Git 对暂存区的文件夹和文件有完整的记录,并且把这些数据作为提交的一部分。对于新提交而言,Git 会创建一个新的 树对象,这个树对象指向已经存在的和新添加的数据对象和树对象。

results matching ""

    No results matching ""