🍣

溜まったローカルブランチを安全に削除!gh poiでブランチ管理が楽になる

に公開

開発を続けていると必ず遭遇する、ローカルブランチ問題

毎日コードを書いていると、気づけばローカルリポジトリには大量のブランチが溜まっています。
つい最近、気づけば78個のローカルブランチが表示されて「うえー」となりました。

そして、こんな疑問が湧いてきます。

  • 「このブランチって、もうマージされてるっけ」
  • 「削除して大丈夫なブランチはどれだろう」
  • 「作業中のブランチを間違って削除してしまったらどうしよう...」

2桁のブランチがあると、どのブランチが削除可能なのか判断に迷うことが多くなります。
ただ1つ1つ確認するのは非常に面倒です。そんなときはgh poiが便利です。

私の開発環境での日常

私の開発環境では、以下のような流れで作業を進めています。

  1. 新機能やバグ修正のためにfeatureブランチを作成
  2. 開発・テスト・コミット
  3. Pull Requestを作成
  4. コードレビュー後、mainブランチにマージ(squash merge)
  5. 次のタスクへ移動

この流れを繰り返していると、ローカルには「マージ済みだが削除していないブランチ」が蓄積されていきます。定期的にクリーンアップしたいのですが、手動で一つずつ確認するのは非常に面倒です。

gh poiとの出会い

そんな時に発見したのが、gh poiというGitHub CLI extensionです。

https://github.com/seachicken/gh-poi

gh poiは、マージされたローカルブランチだけを安全に削除してくれる素晴らしいツールです。

gh poiの導入方法

インストールは簡単ですが、GitHub CLI(https://cli.github.com/)がインストールされていることが前提となります。

gh extension install seachicken/gh-poi

これだけで準備完了です!

実際の使い方

基本的な使い方

最もシンプルな使い方は、以下のコマンドを実行するだけです。

gh poi

このコマンドを実行すると、マージされたローカルブランチを自動的に検出し、削除してくれます。

より安全に使うためのdry-runオプション

いきなりブランチを削除するのは怖いという場合は、--dry-runオプションが便利です。

gh poi --dry-run

このオプションを使うと、実際にブランチを削除することなく、削除対象となるブランチの一覧を表示してくれます。
私はいつもこれで確認してから実際の削除を行うようにしていましたが、もうgh poiを信頼しきっているので、最近はこのオプションはあまり使っていません。

Pull Requestの状態を指定

デフォルトでは「merged」状態のPull Requestに対応するブランチが削除対象となりますが、状態を指定することも可能です。

gh poi --state closed

この場合、「closed」状態のPull Requestに対応するブランチが削除対象になります。
ただ個人的には、デフォルトでよいと思っています。(あまりclosedを対象にしたいときがないため)

デバッグ情報の表示

何らかの問題が発生した場合は、--debugオプションで詳細な情報を確認できます。

gh poi --debug

ブランチの保護機能

特定のブランチを削除対象から除外したい場合は、protect機能を使用できます。

# ブランチを保護
gh poi protect feature-branch

# 保護を解除
gh poi unprotect feature-branch

まとめ

gh poiは、特に以下のような方におすすめできます。

  • ローカルブランチの管理に困っている方
  • 安全にブランチを削除したい方
  • 開発環境を定期的にクリーンアップしたい方

私のように、気づけばローカルブランチが溜まってしまう開発者の方は、ぜひ一度試してみてください。

参考情報

Discussion