GitHub/Gitlab に Pull Request / Merge Requestを送ってリモートレポジトリでマージされたもう不要なブランチがローカル側に溜まっていく問題。
一個一個削除していくのは面倒だからまとめて削除したい。
[参考] Git Tip: Deleting Old Local Branches
git branch -vv
でリモートのブランチとマージ済フラグ(gone
)が見れる。
1 2 3 4 5 |
$ git branch -vv develop c5cb4d0 [origin/develop] fixes ci feature/issue001 8c80336 [origin/feature/issue001: gone] Add comment master c0f134c [origin/master] update README |
.gitconfig
に alias 追加
1 2 3 4 |
[alias] merged-branch = !sh -c 'git branch -vv | grep \"origin/.*: gone]\" | awk \"{print \\$1}\"' delete-merged-branch = !sh -c 'git merged-branch | xargs git branch -d' |
上記を設定することで、 git merged-branch
でマージ済みブランチのリスト、git delete-merged-branch
でマージ済みブランチの削除ができる
1 2 3 4 5 6 |
$ git merged-branch feature/issue001 $ git delete-merged-branch Deleted branch feature/issue001 (was 8c80336). |
なお、ブランチ削除の前にローカルへリモートの状態を反映するため git fetch -p
を事前に実行しておく。
※エイリアスでリモートをorigin
とハードコーディングしているので、他のリモートにしたい場合はリポジトリの.git/config
に個別にリモートを変更したエイリアスを作成しないといけない。
※マッチが簡易なのでコミットコメントに “: gone]
” と入っていたらマージ済みと誤認識する。