GitHubへマージ済みブランチが貯まると git clone
するのにかかる時間が増えてしまったり、ブランチ一覧からお目当てのブランチを探すのが面倒になるなど、地味に生産性を下げるのでこまめにお掃除するのがオススメ。
コマンド
$ git branch --remotes --merged | grep -v "origin/main" | sed -E 's/ origin\/(.*)/\1/' | xargs -I{} git push origin :{}
解説
(1) マージ済みのブランチ一覧を取ってくる
$ git branch --help ... OPTIONS ... -r, --remotes List or delete (if used with -d) the remote-tracking branches. Combine with --list to match the optional pattern(s). ... --merged [<commit>] Only list branches whose tips are reachable from the specified commit (HEAD if not specified). Implies --list.
$ git branch --remotes --merged origin/some-merged-branch-1 origin/some-merged-branch-2 origin/some-merged-branch-3 origin/main
(2) 消しちゃダメなブランチを取り除く
例えば main
ブランチを残しておきたいなら
$ git branch --remotes --merged origin/some-merged-branch-1 origin/some-merged-branch-2 origin/some-merged-branch-3 origin/main $ git branch --remotes --merged | grep -v "origin/main" origin/some-merged-branch-1 origin/some-merged-branch-2 origin/some-merged-branch-3
(3) "origin/" 部分をtrimする
sedで origin/
以降だけを正規表現の参照で取り出す
$ git branch --remotes --merged | grep -v "origin/main" origin/some-merged-branch-1 origin/some-merged-branch-2 origin/some-merged-branch-3 $ git branch --remotes --merged | grep -v "origin/main" | sed -E 's/ origin\/(.*)/\1/' some-merged-branch-1 some-merged-branch-2 some-merged-branch-3
(4) remote branchを削除する
単体のブランチ削除コマンドとxargsを組み合わせて全部消していく
$ git push --help ... git push origin :experimental Find a ref that matches experimental in the origin repository (e.g. refs/heads/experimental), and delete it.
$ git branch --remotes --merged | grep -v "origin/main" | sed -E 's/ origin\/(.*)/\1/' some-merged-branch-1 some-merged-branch-2 some-merged-branch-3 $ git branch --remotes --merged | grep -v "origin/main" | sed -E 's/ origin\/(.*)/\1/' | xargs -I{} git push origin :{} remote: To github.com:aaa/bbb.git - [deleted] some-merged-branch-1 remote: To github.com:aaa/bbb.git - [deleted] some-merged-branch-2 remote: To github.com:aaa/bbb.git - [deleted] some-merged-branch-3
削除対象がたくさんあるときは、xargsに -P n
を指定して並列度上げると短時間で終えられる。