Git squash 基本操作マニュアル

システム開発
スポンサーリンク
スポンサーリンク

Git squash 基本操作マニュアル

Gitのコミット履歴を整理したいときに便利なのが「squash」です。開発中に細かく積み重なったコミットを、レビューやマージの前にまとめて1つにすることで、履歴をシンプルに保てます。本記事では、実際のコマンド操作を交えながら、squashの基本手順をわかりやすく解説します。

1. squashとは?

Gitの「squash」は、複数のコミットを1つにまとめて履歴を整理する操作です。
レビュー前やmainブランチに統合する前にコミットをまとめることで、履歴が見やすくなり、チーム開発でもスッキリとした管理が可能になります。

2. 作業の流れ

  1. 作業環境の確認
  2. mainブランチから最新を取得し、作業用ブランチを作成
  3. rebase -i でコミットをまとめる
  4. squashしたブランチをリモートにpush
  5. 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 エディタでの操作

  1. 最初の行以外の picks に変更する
    • 「i」で編集モードに入る
    • pick → s に書き換える
    • 「Esc」 → :wq で保存終了
  2. コメント編集画面が開くので
    • 「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」に注意しながら利用しましょう

 

 

システム開発
スポンサーリンク
シェアする
tobotoboをフォローする

コメント

タイトルとURLをコピーしました