Git squash 基本操作マニュアル
Gitのコミット履歴を整理したいときに便利なのが「squash」です。開発中に細かく積み重なったコミットを、レビューやマージの前にまとめて1つにすることで、履歴をシンプルに保てます。本記事では、実際のコマンド操作を交えながら、squashの基本手順をわかりやすく解説します。
1. squashとは?
Gitの「squash」は、複数のコミットを1つにまとめて履歴を整理する操作です。
レビュー前やmainブランチに統合する前にコミットをまとめることで、履歴が見やすくなり、チーム開発でもスッキリとした管理が可能になります。
2. 作業の流れ
- 作業環境の確認
- mainブランチから最新を取得し、作業用ブランチを作成
- rebase -i でコミットをまとめる
- squashしたブランチをリモートにpush
- mainに統合
3. 実際の手順
📌 事前状況の説明
例として以下の状況を想定します:
- 元の作業ブランチ:
feature-update
- このブランチには複数のコミットが含まれている
- それらをまとめて整理するために、新しく
feature-update-squash
という作業用ブランチを作成し、そこで squash を行う
「rebase用の作業ブランチ」を別途用意することで、元の feature-update
を残したまま安全に履歴整理ができます。
📌 ブランチ構成の図解
(main)
\
feature-update ← 元の作業ブランチ(複数コミット)
\
feature-update-squash ← squash用に新しく作成
📌 ステップ1:作業環境を確認
# Git Bashを開く
cd プロジェクトフォルダへ移動
# 現在のブランチを確認
git branch
# コミット履歴を確認(直近の履歴を1行表示)
git log --oneline
💡 補足:git log
の履歴表示から抜けるときは q を押します。
📌 ステップ2:mainから最新を取得して作業用ブランチを作成
git checkout main
git pull origin main # mainを最新化
# squash用のブランチを作成して移動
git checkout -b feature-update-squash
# 元の作業ブランチを取り込む
git merge feature-update
# マージを確認
git log --oneline
📌 ステップ3:コミットをまとめる(squash)
# 直近3件のコミットをまとめる例
git rebase -i HEAD~3
💡 コミットのまとめ方
実際のログ例:(ケース例:#39
の直後からの #17
をまとめたい)
82bc874 (HEAD -> issues17squash) #17 倉庫管理UI改善
932730e #17 倉庫管理テストデータ整備
da9f871 #17 倉庫管理エラーハンドリング修正
ff83ca1 #39 原紙在庫引当処理 改善
ここで「#39 の次から続く #17 系の3件」を1つにまとめたい場合:
方法A: を指定する
git rebase -i ff83ca1
#39 自体は含まず、#39 の直後から HEAD まで(#17 系の3件)が対象になります。
方法B:HEAD~N を指定する
BASE=ff83ca1
git rev-list --count ${BASE}..HEAD # #39 の後の件数を取得
# 例:結果が3なら
git rebase -i HEAD~3
この場合も同じく #17 系の3件が1件にまとまります。
編集後は git log --oneline
を確認すると、#17 系が1件にまとめられたことがわかります。
💡 vi エディタでの操作
- 最初の行以外の
pick
をs
に変更する- 「i」で編集モードに入る
- pick → s に書き換える
- 「Esc」 →
:wq
で保存終了
- コメント編集画面が開くので
- 「dd」で不要行を削除
- 「i」で編集モードに入り、まとめたコミットメッセージを入力
- 「Esc」 →
:wq
で保存終了
📌 ステップ4:squashしたブランチをpush
git push -f origin feature-update-squash
# 結果を確認
git log --oneline
📌 ステップ5:mainに統合
git checkout main
git pull origin main # 念のため最新化
git merge feature-update-squash
git push origin main
4. 注意点
git push -f
(強制push)を行うため、チームで共有済みのブランチでは注意が必要です。- squashは履歴を書き換える操作なので、共有前に行うのが安全です。
- viの操作が難しい場合は、
git rebase -i
の代わりにGUIツールやVSCodeの拡張機能を利用するのもおすすめです。 - rebase中に問題が発生した場合:
git rebase --abort
- vi編集中にキャンセルする場合:
:cq
- 進行中の状態を確認する場合:
git status
5. まとめ
- squashは複数コミットを1つにまとめる便利な操作
- 手順は「環境確認 → 作業ブランチ作成 → rebase -i → push → mainへ統合」
- チーム開発では「強制push」に注意しながら利用しましょう
コメント