🗑️
マージ済みのブランチを自動で消す git alias / hooks
設定すること
github上で、PRをマージして、remoteのブランチを削除したあと、
ローカルにブランチが残って溜まって行ってしまうので、削除すると思います。
1つずつ消していくのは面倒なので自分は下記のコマンドで自動で消すようにしています。
$ git delete-merged-branch
Deleted branch feature/branchA
Deleted branch feature/branchB
Deleted branch feature/branchC
中身は下記の通り
.gitconfig
[alias]
delete-merged-branch = "!f () { git branch --merged|egrep -v '\\*|develop|master|main'|xargs git branch -d; };f"
処理の中身的には、
マージ済みのブランチをリストにして、develop|master|mainは除外して、ローカルから消すといういった感じです。
最悪、ローカルから消えてしまうだけなので、リモートから再度checkoutすることも可能です。
また、git hooksを使って、git pullの際や、マージ後に、自動で実行するように設定する事もできます。
.git/hooks/
に post-merge というファイルを作って、
post-merge
#!/bin/sh
# post-merge hook to delete merged branches except main, master and develop
git delete-merged-branch
と書いて、
$ chmod +x .git/hooks/post-merge
で実行権限を与えれば、
マージ後 や Pull後に自動で実行してくれるようになります。
(どのブランチが消えたかは実行時に表示されます。)
追記(2024/03/08修正 )
コメントで、下記のようにfetch.pruneで同じことができるとご指摘いただいたのですが、
git config --global fetch.prune true
おそらく、
git fetch --prune
は、リモートで削除されたブランチに対するrefをローカルから削除しているだけで、ローカルのブランチ自体は削除してくれないようです。(理解が間違えているかもしれません)
それか、自分のなにかの設定が間違えている可能性があります。
Discussion
git config --global fetch.prune true
で足りる気が
なんと。
わざわざ記事に書いたように自作してました。
ご指摘ありがとうございます。
デフォルトの機能で事足りますね。今度からそちらを使うようにしようと思います。