Squash and merge した後のブランチを掃除する

2025/05/11

はじめに

GitHub を使ってブランチをマージするときには 3 つの選択肢がある。

  • Create a merge commit
  • Rebase and merge
  • Squash and merge

仕事では Create a merge commit を使うことが多いが、個人開発では Squash and merge を使った場合の面倒事が発生することが少ないため、master ブランチにちょっとした修正のコミット履歴を残さないように Squash and merge を使うことがある。

Squash and merge を使ったときの面倒事についてはググると記事が見つかるのでそちらを参照して欲しい。

Squash and merge した後にコンフリクトが発生する問題については、rebase するときのオプションで解決できるらしい。

しかし、マージ済みブランチを削除するとき -d ではなく -D で消さなければいけない。定期的に git pull --prune してローカルのマージ済みブランチも掃除しているのでコマンド一発でマージ済みブランチを消せないのは不便に感じる。

--no-ff の場合

Create a merge commit でマージしたときは次の alias を ~/.config/git/config に設定しているので git delete-merged-branch コマンドでマージ済みブランチを削除している。

Loading code...

このエイリアスは以下の記事を参考に developmainmaster ブランチを保護するようにしたものだ。

しかし、これだと Squash and merge でマージしたブランチが消えない問題がある。

Squash and merge に対応したい

ググってみると方法は 4 つ見つかった。

一つ目は gh コマンドの拡張として開発されている poi、二つ目と三つ目は npx を使って実行できる Node パッケージとして配布されている git-delete-squashed、四つ目は git-delete-squashed をシェルスクリプトで実装したものになっている。

gh-poi

今回は poi を試してみる。 gh コマンドを使うので最初にログインする。

Loading code...

gh コマンドを使ったことがない方は Installation を参考にインストールしてください。

ログインできたら gh-poi をインストールする。

Loading code...

Squash マージ済みのブランチを消すためのコマンド gh poi を実行すると次のようになった。

Loading code...

確かに Squash マージしたブランチを削除できた。 git-delete-squashed と違って GitHub の PR 情報を元に Squash マージ済みのブランチか否かを判定しているようだ。

GitHub からデータを取得するのはいまいちな気もするがしばらく使ってみる。問題があれば git-delete-squashed も試してみたい。

SuzumiyaAobaのプロフィール画像

SuzumiyaAoba

プログラミング、技術、その他の話題について共有するブログを書いてます。 主にScala、Java、TypeScriptなどの技術について興味あり。

ScalaJavaTypeScriptReact

Buy Me A Coffee