今回Gitについてあらためて勉強してみて、コミットとブランチの関係について理解が深まったのでメモしたいと思います。
Contents
コミット:オブジェクト
コミットは、リポジトリのスナップショット(Treeオブジェクト)に、親コミットの情報やコミットメッセージを付加した「オブジェクト」です。ちなみにTreeオブジェクトは他のTreeオブジェクトやBlobオブジェクト(「ファイル」に相当)を包含するオブジェクトです。舌噛みそう。
詳しくはこちらの記事がわかりやすいです。
ブランチ:ポインタ
Gitにおけるブランチとは、こうしたコミットの一つを指す、「軽量で移動可能なポインタ」(a lightweight movable pointer)です。つまり、コミットオブジェクトのような「実体」をメモリ上にもつものではありません。作業者がコミットするたびに、ブランチのポインタは自動的に進みます(新しいコミットオブジェクトを指すようになります)。