見出し画像

Git_Commitの仕組みと種類について #452

Gitに関して少し理解を深める機会があったのでメモしておきます。

Gitとは

まず簡単にGitの役割についておさらいを。Gitは、ソースコードのバージョン管理に広く利用されている分散型バージョン管理システムです。変更の履歴を追跡し、複数の開発者が同時に作業できるように設計されています。

Commitとは

Gitにおいて、Commitはプロジェクトの履歴における1つの「チェックポイント」です。ファイルやディレクトリの変更、追加、削除を含むプロジェクトの状態を、特定の時点でキャプチャし保存します。

Commitの識別

開発中、Commitは様々な人から何度も行われます。バージョン管理システムとしてそれらを正確に識別するため、GitではSHA-1を用いて計算されるハッシュ値(40桁の16進数)が使われています。

ハッシュ値が用いられる理由はいくつかありますが、大きな理由はデータの一意性完全性にあります。

このハッシュ値はCommitされた内容(変更されたファイル、親のCommit、作者情報やタイムスタンプなど)から生成され、Commitごとにユニーク(一意)です。ハッシュの衝突が起こる可能性もありますが、稀なケースです。また、データが変更されるとハッシュ値も変わります。これにより、データの変更や破損を容易に検出でき、Gitはデータの完全性を保証できます。

Commitに含まれる情報

プロジェクトの特定の状態を記録するために重要な、以下の情報が含まれています。これらがハッシュ値の元にもなっています。

  • スナップショット

    • その時点でのファイルとディレクトリの状態のスナップショット

    • 変更されたファイル、新しく追加されたファイル、削除されたファイルの内容が含まれる

  • 親Commitの参照

    • ほとんどのCommitは直前のCommitへの参照を1つ持ち、これにより、プロジェクトの履歴が形成される

    • Merge Commitの場合は2つ以上の親Commitへの参照を持つことがある

  • 作者情報

    • Commitを行った開発者の名前とメールアドレス

    • これにより誰が特定の変更を行ったかを追跡できる

  • コミッター情報

    • Commitをリポジトリに統合した人の名前とメールアドレス

    • 通常、作者情報とコミッター情報は同じだが、例えばパッチを適用したり、他の開発者の変更をコミットしたりする場合は異なることがある

  • Commitメッセージ

    • コミッターが記載した、Commitに関する説明や変更内容の要約

    • 良いCommitメッセージは他の開発者が変更の目的や理由を理解するのに役立つ

  • タイムスタンプ

    • Commitが作成された日時

Commitの種類

通常のCommitとMerge Commit、そしてInitial Commitの大きく3つがあります。通常のコミットは上記解説の通りなので、残り2つについて記載します。

Merge Commitとは

Merge Commitは、2つ以上のブランチを統合する際に作成される特別なタイプのCommitです。例えば、機能開発を行ったフィーチャーブランチをメインブランチに統合する際にMerge Commitが作成されます。

Merge Commitには少なくとも2つの親が存在し、統合されたブランチの履歴がMerge Commitに含まれます

つまり、Merge Commitはプロジェクトの履歴において、異なる開発ラインの統合点を表します。

CommitとMerge Commitの違い

主な違いは、通常のCommitが単一の親を持つのに対し、Merge Commitは2つ以上の親を持つことです。

この違いは、Gitの内部でのブランチの扱い方と統合方法に関連しています。通常のCommitは直線的な履歴を形成しますが、Merge Commitは複数のブランチの履歴を1つの点で結びつけるため、プロジェクト履歴に分岐と統合のポイントを提供します。

Initial Commitとは

最後の1種類で、その名の通り最初のCommitを指します。通常のCommitが親を1つ、Merge Commitが親を2つ以上持つのに対し、Initial Commitは親を持たないCommitになります。

CommitとInitial Commitの違い

通常のCommitが持つ情報に加えて、多くの場合、Initial Commitにはプロジェクトの基本的なファイルやディレクトリ構造が含まれます。例えばREADMEファイル、ライセンス情報、初期のソースコードファイルなどです。

また、Initial Commitのメッセージはプロジェクトの目的や概要を説明する良い機会にもなります。このメッセージは「Initial commit」とシンプルにすることが多いですが、プロジェクトの簡単な説明を加えることもあります。


ここまでお読みいただきありがとうございました!

参考


この記事が気に入ったらサポートをしてみませんか?