gitのコミットは以下の情報を持っている。
コミット =
- 親コミットへのポインタ
- 著作者・著作日時
- コミッター・コミット日時
- コミットメッセージ
- コミット時点の内容へのポインタ(内容そのものは別のところにある)
どういう風に?というと、
git cat-file コマンドで実物を見ることができる。
e8e6d64eb083b3086e8ea45ec70e02915a514b68 というコミットがあるとすると、以下のように確認できる。
$ git cat-file -p e8e6d64eb083b3086e8ea45ec70e02915a514b68 tree 641652e56a0ac28f314d83c227e446f0394cef05 parent 1cc1a476468d8106ef2954f959dc7b747159a353 author xxxx著作者xxxx 1585804211 +0200 committer xxxxコミッターxxxx 1585804211 +0300
元になっているデータはどこにあるのかというと、
.git/objects ディレクトリの中を探すと、
(圧縮されていなければ)e8/e6d64eb083b3086e8ea45ec70e02915a514b68 というファイルがある。
圧縮されているので、コマンド経由で展開すると中身が見える。
tree 641652e56a0ac28f314d83c227e446f0394cef05 ↑コミット時点のツリーへのポインタ
や
parent 1cc1a476468d8106ef2954f959dc7b747159a353 ↑親コミットへのポインタ
なども、ファイルが存在して情報をたどっていくことができる。