リモートが消失したブランチを削除するGitエイリアス

アップストリームのリモートトラッキングブランチが削除されたローカルブランチを見つけて削除するgitエイリアスを作成。マージ済みPR後のクリーンアップ。

Cleanup Aliases

詳細な説明

リモートが消失したブランチの削除

PRがマージされてリモートブランチが削除された後、ローカルブランチは「gone」のアップストリームで残ることがあります。このエイリアスでそれらを見つけて削除します:

[alias]
    gone = !git fetch -p && git branch -vv | grep ': gone]' | awk '{print $1}' | xargs -r git branch -D

パイプラインの分解

  1. git fetch -p フェッチして古いリモートトラッキング参照を整理
  2. git branch -vv 詳細なトラッキング情報付きでブランチを一覧表示
  3. grep ': gone]' アップストリームが「gone」とマークされたブランチをフィルタリング
  4. awk '{print $1}' ブランチ名のみを抽出
  5. xargs -r git branch -D 各ブランチを強制削除(-rフラグで入力が空の場合の実行を防止)

「Gone」ブランチの理解

リモートブランチを追跡するローカルブランチを作成し、そのリモートブランチが削除されると、git branch -vvは以下を表示します:

  feature/login a1b2c3d [origin/feature/login: gone] Add login page
  feature/api   e4f5g6h [origin/feature/api: gone] Add API routes
  main          i7j8k9l [origin/main] Latest commit

なぜ-dではなく-D

PRを通じてマージされた場合(リモートでマージコミットが作成される)、ローカルブランチのコミットが現在のブランチから到達できない場合があるため-D(強制削除)を使用します。

cleanupgoneの使い分け

エイリアス アプローチ 最適な用途
cleanup 現在のブランチにマージされたブランチを削除 ローカルワークフロー
gone リモートが削除されたブランチを削除 PRベースのワークフロー

ユースケース

プルリクエストワークフローでブランチがマージ後にリモートで削除されるチームで使用します。毎週実行してローカルリポジトリをクリーンに保ちます。GitHubの「Delete branch」ボタン後のクリーンアップに最も信頼性の高い方法です。

試してみる — Git Alias Builder

フルツールを開く