featureブランチのコミットすべてをマージするのではなく、最終系のみマージしたい(Squashマージ)

featureブランチのコミットの履歴がdevelopブランチにすべて表示されるのを避けたい。そんなときはSquashマージをすれば良いらしい

作成日:2025-06-05, 更新日:2025-06-05

概要

何かしらの機能追加や修正作業が入ったとき、基本下記のような感じ

  1. masterブランチ or developブランチからfeatureブランチ作成
  2. featureブランチでファイル追加・削除・修正を行ってコミット・プッシュ
  3. 確認・テスト
  4. 問題があったり追加作業があれば、再度featureブランチでファイル追加・削除・修正を行ってコミット・プッシュ
  5. 確認・テスト...を繰り返す
    繰り返した結果、履歴は下記のようになった場合

    • コミット1: ファイルAにa1を追加
    • コミット2: ファイルAのa1をa2に修正
    • コミット3: ファイルAのbを修正
  6. featureブランチをdevelopブランチにマージ
    履歴は下記

    • コミット1: ファイルAにa1を追加
    • コミット2: ファイルAのa1をa2に修正
    • コミット3: ファイルAのbを修正
  7. developブランチをmasterブランチにマージ
    履歴は下記

    • コミット1: ファイルAにa1を追加
    • コミット2: ファイルAのa1をa2に修正
    • コミット3: ファイルAのbを修正

このとき、featureブランチのコミット内容がmasterブランチ、developブランチに表示される...これを避けたい
希望はmasterブランチ、developブランチにはfeatureブランチの最終的な変更をマルっと突っ込みたい

下記のような感じでdevelopの履歴は「コミット1」~「コミット3」ではなく「コミットA」だけにしたい

  1. developにマージ
    履歴は下記のように一つにまとめたい

    • コミットA: ファイルAにa2、bを追加・修正

Squashマージ

途中のコミット内容じゃなく最終的な変更をマージしてくれるらしい

developブランチにマージして下記実行

$ git merge --squash feature/●●●●

あとは、developブランチでコミットすればOK

ブランチ一覧

使っているGUIだと、Squashマージはコマンドを入力する必要があるらしい
そうなってくるとチェックアウトされているブランチを念のために確認したい

そのときのコマンド

$ git branch
* develop
  feature/●●●●
  master