無料プレビュー 6 / 14

ブランチの心象モデル — 「並行宇宙」として理解する

学習目標

このレッスンを終えると、次のことができるようになります。

  • branch (ブランチ) を「並行宇宙のスナップショット」として説明できる
  • main / feature / hotfix の代表的な使い分けを区別できる
  • ブランチ作成・切り替え・削除の基本コマンドを実行できる

ブランチとは何か (1 行で)

branch (ブランチ) = 「ある commit から枝分かれして、本流に影響せずに作業できる並行宇宙」

メインの世界線 (main ブランチ) で本番が動いている横で、自分の作業用世界線 (feature/login ブランチ) で実験ができる。完成したら枝を本流に merge (統合) する。

gitGraph commit id: "A" commit id: "B" branch feature/login checkout feature/login commit id: "C: ログイン UI" commit id: "D: 認証処理" checkout main commit id: "E: バグ修正" checkout feature/login merge main id: "F: main 同期" checkout main merge feature/login id: "G: ログイン完成"

main で起きた E (バグ修正) と feature/login の C・D は並行して進む。最後に merge して本流に戻る。

なぜブランチを切るか — 4 つの動機

動機 例
作業隔離: 失敗しても本流に影響しない 「ログイン機能を試作したい」→ feature/login
レビュー単位: Pull Request で他人が読む単位 1 機能 = 1 ブランチ = 1 PR
並行作業: 複数人が同時に違う作業 山田は feature/search、鈴木は feature/profile
緊急修正: リリース版を壊さず緊急対応 hotfix/cve-2026-12345

「直接 main に書く」のは、上記すべての利点を捨てる選択。AI Agent 時代であっても、ブランチを切る習慣は基本。

典型的なブランチ命名

プレフィックス 用途 例
feature/ 新機能 feature/sso-integration
fix/ または bugfix/ バグ修正 fix/login-redirect
hotfix/ 本番緊急修正 hotfix/security-patch-2026-05、hotfix/cve-2026-12345
chore/ 雑務 (依存更新・整理) chore/upgrade-django-5.1
docs/ ドキュメントのみ docs/add-faq
experiment/ または wip/ 実験・破棄前提 experiment/new-recommender

ailms プロジェクトでは「目的 + 簡潔な説明」をハイフン区切りで書くのが慣習。

ブランチの基本操作

一覧を見る

git branch                     # ローカルブランチ一覧。* が現在地
git branch -a                  # リモートブランチ含む全部

出力例:

  feature/profile
* feature/login                ← * が現在のブランチ (HEAD)
  main
  remotes/origin/main

ブランチを作る

git branch feature/login       # 作るだけ (移動はしない)
git switch feature/login       # そのブランチに移動

# 一発で作って移動 (推奨)
git switch -c feature/login

git switch (Git 2.23 以降) は git checkout の安全な後継。ブランチ切替は switch を使う。

ブランチを削除する

git branch -d feature/login    # 安全: merge 済のときだけ削除
git branch -D feature/login    # 強制: 未 merge でも削除 (注意!)

⚠️ -D (大文字) は破壊的。AI Agent 単独実行不可。

ブランチを切り替える時の注意

未コミットの変更がある状態でブランチを切り替えると、Git は安全のためエラーで止める:

error: Your local changes to the following files would be overwritten by checkout

対処法は 2 つ:

方針 コマンド いつ
コミットしてから移動 git add -A && git commit -m "wip" 変更を保持したい
一時退避してから移動 git stash → 移動 → git stash pop まだコミットするほど固まってない

HEAD と「現在のブランチ」

HEAD = 「いま自分が居る commit を指すポインタ」。普段はブランチ名と同じ位置にある。

main ─── A ─── B
                ↑
              HEAD = main ブランチの先端

git switch feature/login すると HEAD が動く:

main ────── A ─── B
                   \
feature/login ──── C ─── D
                          ↑
                        HEAD = feature/login の先端

新しい commit はそのブランチの先端に積まれる。

ブランチは「ポインタ」なのでコピーが速い

Git のブランチはファイルのコピーを作るのではなく、commit を指す軽量なポインタ。だからブランチ作成は一瞬で終わる (古い SVN とは違う)。

「branch を切るのに時間がかかる」「コストが高い」というのは Git では誤解。気軽に切って気軽に捨てるのが正解。

振り返り

  • ブランチ = 並行宇宙のスナップショット。作業隔離・レビュー単位・並行作業のために切る
  • git switch -c <名前> で作成+移動が一発
  • ブランチは軽量なポインタ。気軽に切って気軽に捨てる
  • 未コミット変更がある時は git stash で退避

次のレッスンでは、分かれた枝を戻す方法 (merge) を学びます。

参考リンク

全 14 レッスンを、登録なしで無料で読めます。