Gitブランチ管理のすべて:基本操作からチーム戦略まで
Gitの最重要機能であるブランチの包括的なガイド。基本的な操作から、マージ、リベース、コンフリクト解決、そしてGit FlowやGitHub Flowといったチームでのブランチ戦略まで、実用的なコマンド例と共に解説します。
git Gitbranchversion controlGit FlowGitHub Flow
ブランチ管理
Gitブランチの作成、切り替え、マージ、削除などの包括的な管理ガイド
ブランチとは
ブランチは、開発の分岐点を作成し、並行して複数の機能開発やバグ修正を行うためのGitの核心機能です。メインの開発ラインに影響を与えることなく、独立した作業環境を提供します。
基本的なブランチ操作
ブランチの確認
git branch # ローカルブランチ一覧
git branch -r # リモートブランチ一覧
git branch -a # 全ブランチ一覧
git branch -v # 各ブランチの最新コミット情報も表示
ブランチの作成
git branch <ブランチ名> # ブランチ作成(切り替えなし)
git checkout -b <ブランチ名> # ブランチ作成と切り替え
git switch -c <ブランチ名> # 新しい記法(Git 2.23以降)
# 特定のコミットからブランチ作成
git branch <ブランチ名> <コミットハッシュ>
git checkout -b <ブランチ名> <コミットハッシュ>
ブランチの切り替え
git checkout <ブランチ名> # 従来の記法
git switch <ブランチ名> # 新しい記法(推奨)
# 直前のブランチに戻る
git checkout -
git switch -
ブランチの削除
git branch -d <ブランチ名> # マージ済みブランチの削除
git branch -D <ブランチ名> # 強制削除(未マージでも削除)
# リモートブランチの削除
git push origin --delete <ブランチ名>
git push origin :<ブランチ名> # 短縮形
ブランチのマージ
Fast-forwardマージ
# mainブランチに切り替え
git checkout main
# feature-branchをマージ
git merge feature-branch
# Fast-forwardを強制的に無効化(マージコミットを作成)
git merge --no-ff feature-branch
3-wayマージ
# 複数の親を持つマージコミットが自動作成される
git merge feature-branch
# マージコミットにメッセージを指定
git merge feature-branch -m "Feature: 新機能を追加"
Squash マージ
# 複数のコミットを1つにまとめてマージ
git merge --squash feature-branch
git commit -m "Feature: 新機能を追加(複数コミットをsquash)"
リベース(Rebase)
基本的なリベース
# feature-branchでの作業をmainの最新状態に再適用
git checkout feature-branch
git rebase main
# または
git rebase main feature-branch
インタラクティブリベース
# 過去3つのコミットを編集
git rebase -i HEAD~3
# リベース中のオプション
# pick: コミットをそのまま使用
# reword: コミットメッセージを編集
# edit: コミットを編集(ファイルも変更可能)
# squash: 前のコミットと結合
# drop: コミットを削除
リベース vs マージの使い分け
# マージ: 履歴を保持したい場合
git merge feature-branch
# リベース: 線形な履歴を保ちたい場合
git rebase main
ブランチ戦略
Git Flow
# 開発ブランチから機能ブランチを作成
git checkout develop
git checkout -b feature/new-feature
# 開発完了後、developにマージ
git checkout develop
git merge --no-ff feature/new-feature
git branch -d feature/new-feature
# リリース準備
git checkout -b release/v1.0.0 develop
# リリース後
git checkout main
git merge --no-ff release/v1.0.0
git tag v1.0.0
git checkout develop
git merge --no-ff release/v1.0.0
GitHub Flow
# mainから機能ブランチを作成
git checkout main
git pull origin main
git checkout -b feature/new-feature
# 開発とプッシュ
git add .
git commit -m "feat: 新機能を追加"
git push origin feature/new-feature
# プルリクエスト作成・レビュー・マージ後
git checkout main
git pull origin main
git branch -d feature/new-feature
Feature Branch Workflow
# 各機能を独立したブランチで開発
git checkout -b feature/user-authentication
git checkout -b feature/payment-system
git checkout -b bugfix/login-issue
# 開発完了後にmainにマージ
リモートブランチとの連携
リモートブランチの取得
git fetch origin # 全てのリモートブランチ情報を取得
git fetch origin <ブランチ名> # 特定ブランチのみ取得
リモートブランチのチェックアウト
# リモートブランチをローカルにチェックアウト
git checkout -b <ローカルブランチ名> origin/<リモートブランチ名>
git checkout --track origin/<ブランチ名> # 同名でトラッキング設定
# 新しい記法
git switch -c <ローカルブランチ名> origin/<リモートブランチ名>
上流ブランチの設定
# 初回プッシュ時に上流ブランチを設定
git push -u origin feature-branch
# 既存ブランチに上流ブランチを設定
git branch --set-upstream-to=origin/feature-branch
# 上流ブランチの確認
git branch -vv
コンフリクトの解決
マージコンフリクトの発生
git merge feature-branch
# Auto-merging file.txt
# CONFLICT (content): Merge conflict in file.txt
# Automatic merge failed; fix conflicts and then commit the result.
コンフリクトの解決手順
# 1. コンフリクトファイルを確認
git status
# 2. ファイルを編集してコンフリクトマーカーを削除
# <<<<<<< HEAD
# 現在のブランチの内容
# =======
# マージしようとしているブランチの内容
# >>>>>>> feature-branch
# 3. 解決後にステージング
git add <解決したファイル>
# 4. マージコミット
git commit
リベースコンフリクトの解決
# コンフリクト解決後
git add <解決したファイル>
git rebase --continue
# リベースを中止
git rebase --abort
高度なブランチ操作
チェリーピック
# 特定のコミットを現在のブランチに適用
git cherry-pick <コミットハッシュ>
# 複数のコミットを適用
git cherry-pick <ハッシュ1> <ハッシュ2>
# 範囲指定でチェリーピック
git cherry-pick <開始ハッシュ>..<終了ハッシュ>
ブランチの比較
# ブランチ間の差分を表示
git diff main..feature-branch
# ファイル名のみ表示
git diff --name-only main..feature-branch
# 統計情報付きで表示
git diff --stat main..feature-branch
ブランチのリネーム
# 現在のブランチ名を変更
git branch -m <新しいブランチ名>
# 他のブランチ名を変更
git branch -m <古いブランチ名> <新しいブランチ名>
# リモートのブランチ名も変更する場合
git push origin --delete <古いブランチ名>
git push origin <新しいブランチ名>
git push origin -u <新しいブランチ名>
ブランチ管理のベストプラクティス
命名規則
# 機能ブランチ
feature/user-authentication
feature/payment-integration
feat/responsive-design
# バグ修正ブランチ
bugfix/login-error
hotfix/critical-security-issue
fix/responsive-layout
# リリースブランチ
release/v1.2.0
release/2025-q2
# 実験的ブランチ
experiment/new-algorithm
spike/performance-test
ブランチの寿命管理
# 短期間ブランチ(機能開発)
# - 数日から数週間
# - 早期マージを心がける
# 長期間ブランチ(リリース)
# - 数週間から数ヶ月
# - 定期的にメインブランチの変更を取り込む
定期的なメンテナンス
# マージ済みブランチの一覧
git branch --merged
# マージ済みブランチの一括削除
git branch --merged | grep -v main | xargs git branch -d
# リモートで削除されたブランチをローカルからも削除
git remote prune origin
トラブルシューティング
よくある問題と解決法
ブランチ切り替え時の未コミット変更
# 一時保存
git stash
git checkout other-branch
git stash pop
# または強制切り替え(変更は失われる)
git checkout -f other-branch
間違ったブランチでコミット
# 最新コミットを他のブランチに移動
git checkout correct-branch
git cherry-pick wrong-branch
git checkout wrong-branch
git reset --hard HEAD~1
リモートブランチが見つからない
# リモート情報を更新
git fetch origin
# 削除されたリモートブランチの参照を削除
git remote prune origin
パフォーマンス最適化
大量のブランチがある場合
# ブランチ一覧の高速表示
git for-each-ref --format='%(refname:short)' refs/heads/
# リモートブランチのみ高速表示
git for-each-ref --format='%(refname:short)' refs/remotes/
ブランチ履歴の可視化
# グラフィカルなログ表示
git log --graph --oneline --all
# より詳細なブランチ構造
git log --graph --pretty=format:'%C(yellow)%h%C(reset) - %C(blue)%an%C(reset), %C(green)%ar%C(reset) : %s %C(red)%d%C(reset)' --all