まるノート

備忘録も兼ねて、様々なお役立ち情報をまとめています。

【Git】git commit を実行し「.git」の状態を調べてみた。

以下の記事で Hello world と記入した test.txt をステージに追加した場合、
「.git」内でどのような変化があるかを調べました。

【Git】git init ~ git add を実行し「.git」の状態を調べてみた。 - まるノート


git commit

続けてコミットを行うとどのような変化があるか、調べてみます。
test.txt をステージへの追加後、コミットを行う前の「.git/objects」は以下の状態です。

実行します。

$ git commit -m "first commit"
[master (root-commit) d6e1f7e] first commit
 1 file changed, 1 insertion(+)
 create mode 100644 test.txt

すると「objects」配下に2つのフォルダが生成されました。

「40」フォルダ内は以下のファイルが存在しています。

同様に「d6」フォルダ内は以下の通りです。


tree オブジェクト

まずは「40」フォルダの内容をgit cat-file -pコマンドで確認してみます。

$ git cat-file -p 401ce7dbd55d28ea49c1c2f1c1439eb7d2b92427
100644 blob 802992c4220de19a90767f3000a79a31b98d0df7    test.txt

左からアクセス権限、ファイルの種類、オブジェクトID、ファイルのパスを表しています。
git addを実行した後の「Index」とよく似ていますが少し違います。
ですが、ステージに追加した test.txt のハッシュ値である
「802992c4220de19a90767f3000a79a31b98d0df7」を指している点は共通です。

これは treeオブジェクト と呼ばれるものになります。
これだけではさっぱりわからないと思いますが、ひとまず置いといて、 もう一つ生成されたフォルダを見てみます。


commit オブジェクト

次に「d6」フォルダの内容を同じくgit cat-file -pコマンドで確認してみます。

$ git cat-file -p d6e1f7eb272690a4e0f0eaa1de2fd92c6f11c1e7
tree 401ce7dbd55d28ea49c1c2f1c1439eb7d2b92427
author Hogetaro <Hogetaro@yahoo.co.jp> 1653910407 +0900
committer Hogetaro <Hogetaro@yahoo.co.jp> 1653910407 +0900

first commit

今度は、大分毛並みの異なる結果となりました。
「tree 401ce7dbd55d28ea49c1c2f1c1439eb7d2b92427」を見てわかる通り、
この部分は同じタイミングで生成されたtreeオブジェクトを指しています。
こちらはcommitオブジェクトと呼ばれるものになります。

以上、git commitを実行することで、
treeオブジェクトとcommitオブジェクトが生成される。ということが確認できました。

後日、これらがどのような意味をもつのか、に詳しく触れてゆきたいと思います。