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の操作がより直感的になります。
← 一覧に戻る