リモートが消失したブランチを削除する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
パイプラインの分解
git fetch -pフェッチして古いリモートトラッキング参照を整理git branch -vv詳細なトラッキング情報付きでブランチを一覧表示grep ': gone]'アップストリームが「gone」とマークされたブランチをフィルタリングawk '{print $1}'ブランチ名のみを抽出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(強制削除)を使用します。
cleanupとgoneの使い分け
| エイリアス | アプローチ | 最適な用途 |
|---|---|---|
cleanup |
現在のブランチにマージされたブランチを削除 | ローカルワークフロー |
gone |
リモートが削除されたブランチを削除 | PRベースのワークフロー |
ユースケース
プルリクエストワークフローでブランチがマージ後にリモートで削除されるチームで使用します。毎週実行してローカルリポジトリをクリーンに保ちます。GitHubの「Delete branch」ボタン後のクリーンアップに最も信頼性の高い方法です。