📝ノート
Git がついに腑に落ちる
Tony Duong
3月 23, 2026 · 1 分
#git#version-control#video#fundamentals

概要
Git をゼロから分解して理解する動画。多くの開発者はコマンドを暗記しているだけで内部モデルを理解していない。ここでは「なぜそう動くか」を整理し、Git への苦手意識を減らすことが目的。
Git はデータベース
- Git はデータベースで、基本単位はコミット。
- コミットは、その時点のプロジェクト全体のスナップショット。
- 「差分だけ」ではなく、その瞬間の全ファイル状態を保持する。
コミットに含まれるもの
- スナップショットへのポインタ
- メタデータ(作成者、時刻、メッセージ)
- 親コミットへのポインタ
コミットは過去へ向かってつながる。最初のコミットは親を持たない。マージコミットは通常2つの親を持つ。
DAG(有向非巡回グラフ)
Git の履歴は DAG。
- 有向:リンク方向は子 -> 親
- 非巡回:ループしない
- グラフ:ノード(コミット)とエッジ(関係)
各コミットが完全なスナップショットなので、任意の時点に直接戻れる。
ブランチはポインタ
- ブランチはコードのコピーではなく、コミット hash へのポインタ。
git branch featureはそのポインタ(ラベル)を作るだけ。- ブランチ上で commit すると、新しい commit が作られ、ブランチポインタが前進する。
mainも特別な仕組みではなく、運用上の約束。
HEAD
HEADは現在地を示すポインタ。- 通常は
HEAD -> branch -> commit。 - 生の commit hash を checkout すると
HEADが commit 直指しになり、detached HEAD になる。 - detached HEAD で作った commit は、参照するブランチがなければ孤立し、最終的に GC される。
Git の3つの領域
- Working directory(作業中ファイル)
- Staging area / index(次コミットの準備)
- Repository(永続履歴)
流れ:編集 -> git add -> git commit。
取り消し系コマンド
- checkout:HEAD を移動
- reset:ブランチ先頭を移動(
--soft/--mixed/--hardで作用範囲が変わる) - revert:打ち消しコミットを新規作成(共有履歴に安全)
要点
- Git はスナップショット型の履歴DB
- ブランチはポインタでありコピーではない
- HEAD は現在地
- detached HEAD では孤立コミットに注意
- このモデルを理解すると checkout/reset/revert/merge/rebase が分かりやすくなる
Claudeによる翻訳