4章コミット

コミット(commit)は、ある時点でのリポジトリの状態を捉えたスナップショットだ。コミットのスナップショットは、新しいスナップショットが前のスナップショットを指すという形でチェインされる。時間の経過とともに、一連の変更はコミットの連続という形で表現される。

Gitはリポジトリの変化を記録するための手段としてコミットを使う。表面的に見れば、Gitのコミットはほかのバージョン管理システムのチェクインやコミットと似ている。しかし、似ているのは表面的な部分だけだ。舞台裏でGitがコミットを作成、管理する内部メカニズムは、非常に特異なものになっている。

あなたがコミットしたとき、Gitはそのときのインデックスの状態のスナップショットを撮り、オブジェクトストアに格納する。これは「2章 基本コンセプト」で簡単に説明した通りだ。しかし、スナップショットには、インデックスに含まれているすべてのファイルとディレクトリのコピーが含まれているわけではない。Gitは、新しいコミットを作成するときにインデックスの現在の状態と前回のコミットで撮ったスナップショットを比較し、変更されたファイル、ディレクトリのリストを作る。Gitはこのリストに基づいて変更されたファイルの新しいブロブオブジェクトと変更されたディレクトリの新しいツリーオブジェクトを作り、変更されていないブロブ、ツリーについては再利用する。

コミットのためにインデックスをどのように準備するかについては「5章 ファイル管理とインデックス」で説明する。この章は、コミットを作ったときに何が起きるかにピントを絞る。まず、コミットがどのように導入されるかを探り、アトミックなチェンジセットの重要性を理解しよう。次に、コミットの識別方法とコミット履歴の見方を学ぶ。 ...

Get 実用 Git 第3版 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.