0
0

Git-3 コミットについての詳細

Last updated at Posted at 2024-04-22

概要

コミットを実行した時、gitリポジトリにはblobオブジェクト、treeオブジェクト、commitオブジェクトが記録される。

コミットを時系列順に積み上げていく

b.png

blobオブジェクト

ステージング領域で指定されたファイル1つ1つはそれぞれblobオブジェクトというファイルとしてgitリポジトリに保存される。これが各ファイルの実質的なフルバックアップとなる。また、それぞれのblobオブジェクトの識別子はファイルの内容からSHA-1で算出したハッシュ値となる。

treeオブジェクト

gitで管理しているプロジェクト内の全てのディレクトリの内容(ファイル一覧)と、各ファイルに対応するblobオブジェクトを紐づけて、コミットを実行した時点におけるプロジェクト全体の状態を作成する。

各ファイルに対応するblobオブジェクトは、

  • ステージングで指定されたファイルは新規のblobオブジェクト(今回のコミットで記録される)
  • 上記以外のファイルのblobオブジェクトは直前のコミットにおけるtreeオブジェクトから引き継ぎ

となる。

一度もステージングされたことがないファイルは、treeオブジェクトにも入らないし、gitの管理対象にならない。

treeオブジェクトはコミットを実行する度に新規追加されてコミットと紐づけられる。そのため、あるコミット時点でのプロジェクト全体の状態(スナップショット)を表し、どこでも復元することを可能にしているのが、treeオブジェクトである。

commitオブジェクト

コミットに付随する情報とtreeオブジェクトへの参照などの情報を含むオブジェクト。

  • コミットを実行した人
  • コミット日時
  • 今回のコミットで新規作成されたtreeオブジェクトへの参照
  • 直前のコミットへの参照("親コミット"という)

※gitリポジトリの最初のコミットには親コミットは存在しない。

これらの情報を持っていることにより、commitオブジェクトから、

  • コミットした時点のtreeオブジェクト(プロジェクトのスナップショット)の内容を見て、そこに紐づけされたblobオブジェクトからプロジェクト全体のファイル・ディレクトリの状態を復元することができる
  • 親コミットを辿っていってgitリポジトリ全体の歴史(コミット履歴)を知ることができる
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0