📂

Gitの仕組み - バージョン管理の内部構造

15分 で読める | 2025.12.08

Gitの基本概念

Gitは分散型バージョン管理システムです。各開発者がリポジトリの完全なコピーを持ち、オフラインでも作業できます。

Gitの特徴: スナップショット方式でファイルを管理し、差分ではなく状態全体を記録します。

Gitオブジェクトの種類

Gitは4種類のオブジェクトでデータを管理します:

1. Blob(Binary Large Object)

ファイルの内容を格納するオブジェクトです。ファイル名は含まず、純粋なデータのみを保持します。

# blobオブジェクトの確認
git cat-file -p <blob-hash>

2. Tree

ディレクトリ構造を表すオブジェクトです。blobや他のtreeへの参照とファイル名を持ちます。

3. Commit

スナップショットを記録するオブジェクトです:

  • トップレベルのtreeへの参照
  • 親コミットへの参照
  • 作者・コミッター情報
  • コミットメッセージ

4. Tag

特定のコミットに名前を付けるオブジェクトです。リリースバージョンの管理に使用されます。

SHA-1ハッシュ

全てのオブジェクトはSHA-1ハッシュで識別されます。同じ内容なら同じハッシュになるため、重複データを効率的に排除できます。

# オブジェクトのハッシュを確認
git hash-object README.md

# コミットハッシュの確認
git log --oneline

ブランチの仕組み

ブランチは単なる「コミットへのポインタ」です。新しいブランチを作成しても、ポインタが1つ増えるだけで、データのコピーは発生しません。

# ブランチの実体(.git/refs/heads/main)
cat .git/refs/heads/main
# → コミットハッシュが表示される

HEADとは: 現在チェックアウトしているブランチを指すポインタです。.git/HEADファイルに記録されています。

マージの種類

Fast-forward マージ

分岐がない場合、ポインタを単純に進めるだけで完了します。

3-way マージ

分岐がある場合、共通の祖先と両方のブランチを比較して新しいマージコミットを作成します。

まとめ

Gitは、blob・tree・commit・tagの4種類のオブジェクトとSHA-1ハッシュを使って、効率的かつ信頼性の高いバージョン管理を実現しています。ブランチがポインタに過ぎないことを理解すると、Gitの操作がより直感的になります。

← 一覧に戻る