提交物件

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)。