GitHub Desktopで実践する「Squash merge」完全ガイド
— 授業・チーム運用にそのまま使える手順と運用ルール —
目次
この記事で扱うこと
- スクワッシュマージ(Squash merge)の狙いと注意点
- GitHub Desktopだけで完結する2つのやり方
- ブランチ内の複数コミットを1つにまとめる
- 別ブランチをスクワッシュして現在のブランチへ取り込む
- 授業・共同開発での運用ルール例とよくある失敗の対処
なぜスクワッシュマージ?
- PRの「WIP/typo 直し」等の細切れコミットを1コミットに集約して、履歴を機能単位で読みやすくするため。
- 後でその機能一式を丸ごとrevertしやすい(1コミット分だけ戻せば良い)。
- ただし細粒度の履歴はメイン履歴上からは見えなくなる点に注意(PR画面では追える)。
前提
- 操作はすべて GitHub Desktop(Windows / macOS 共通UI)で完結します。
- 機能そのものと具体メニュー名はGitHub公式ドキュメントに準拠しています。
やり方①:ブランチ内のコミットをまとめる(Historyでのスクワッシュ)
「featureブランチで“WIP”や“fix”を重ねてしまった。PR前に1コミットへ整理したい」ケース。
- Current Branch から対象ブランチを選ぶ。
- 左サイドバーの History を開く。
- まとめたいコミットを Cmd/Ctrl や Shift で複数選択し、まとめ先のコミットへドラッグ&ドロップ。
- 表示されるダイアログでメッセージを整え、Squash Commits を実行。
- 途中でForce push が必要と出ることがある(公開済み履歴を書き換えるため)。
- 対象にマージコミットが含まれると失敗する。
- 未コミット変更がある場合はStash して継続する案内が出る。(以上の動作・エラーメッセージ仕様は公式Docsのとおり)
ヒント:履歴の並べ替え(Reorder)も同じ History 画面でドラッグ&ドロップ対応。順序を整えてからSquashするとコミット物語が作りやすい。
やり方②:他ブランチをスクワッシュして取り込む(メニュー操作)
「main に feature/xyz を1コミットで取り込みたい」ケース(PRなしローカル運用や教材用)。
- 取り込み先ブランチ(例:main)をチェックアウト。
- メニューバー Branch → Squash and Merge into Current Branch。
- 取り込み元ブランチを選び、Squash and merge → 取り込み完了後に Push origin。(上記メニューと手順は公式Docsに明記)
PR運用との関係
- GitHub(Web)のPR画面でも “Squash and merge” を選べます。リポジトリ設定の Allow squash mergingを有効化しておくと良い。
コミットメッセージ例(Conventional Commits)
- Summary: feat: 敵AIの初期行動を追加
- Description: 何を/なぜ/影響範囲。関連Issueやブレイキング変更があれば併記。
- 共同作業者を残す場合は本文末にCo-authored-by: 氏名 <email>(PR本文に列挙しても可)
よくある失敗と対処
- 「Force push が必要」通知→ 公開済みブランチの履歴を書き換えるため。共同作業なら事前告知の上、feature ブランチに対してのみ実施を推奨。
- 「マージコミットが含まれているためSquash失敗」→ その範囲を避けて分割してSquashする/先にReorderや再作業で解消。
- 未コミット変更がある→ 案内に従って Stash Changes and Continue。
授業・チーム運用のおすすめルール
- 原則:PRは “Squash and merge”(メイン履歴を1PR=1コミットで清潔に)。
- 例外:低レイヤや障害解析用のリポジトリは通常マージで細粒度履歴を保持。
- 事前整形:受講生はPR前に History → Squash でノイズコミットをまとめる。
- レビュー観点:Summaryは機能単位の要約、Descriptionで背景・副作用・テスト観点を明記。
参考:CLIで同等操作をするなら(知識補強)
# 1) 別ブランチをスクワッシュ取り込み(マージコミットは作らない)
git switch main
git fetch origin
git merge --squash origin/feature-xyz
git commit -m "feat: 〇〇機能を追加(概要…)"
git push origin main
# 2) ブランチ内のコミットをまとめる(対話的リベースの一例)
git switch feature-xyz
git rebase -i origin/main # pick/squash/fixup を使う
git push -f origin feature-xyz # 公開後は要注意
Desktopの手順と概念対応を理解するための補足です。実作業はDesktopで完結可。
訪問数 4 回, 今日の訪問数 4回
ディスカッション
コメント一覧
まだ、コメントがありません