困ったこと
気づくと手元にブランチがたくさん存在した状態となり、一個ずつ git branch -d hoge
としていくのは手間だなぁと感じることが多々ありました。同僚に同じような悩みがないか聞いたところ、masterなど特定のブランチ以外を一括で削除するスクリプトを使うとのことでしたが、それだと作業中のブランチも削除されてしまうので自分の期待通りではありませんでした。
$ git branch
hoge
hoge1
* hoge10
hoge2
hoge3
hoge4
hoge5
hoge6
hoge7
hoge8
hoge9
master
やりたいこと
- 何かコマンドを叩く
- ブランチ一覧が表示される(絶対に削除しないブランチは事前にフィルターしておく
- ブランチ一覧上で任意のブランチ複数個を簡単に選択できる
- エンターキーを押したら任意のブランチが一括で削除される
解決方法
課題はブランチ一覧上で任意のブランチを複数個選択する方法だったが、 peco を使うことで簡単にできた。peco には複数行選択機能があったので、それによりブランチの複数選択ができた。あとはgitのブランチ削除コマンドに渡してあげれば解決。gitのalias設定をしておくことですぐに呼び出せるようにした。 select-delete-branch
は好みに設定してください。
[alias]
select-delete-branch = !git b -D $(git branch | grep -v '*' | grep -v master | sed 's/ //g' | peco)
実行例
$ git branch
aaa
bbb
ccc
ddd
eee
fff
* master
$ git select-delete-branch
# 以下が表示されるので Control + Space で複数選択をする
QUERY> IgnoreCase [6 (1/1)]
aaa
bbb
ccc
ddd
eee
fff
# エンターキーを押すと以下のように一括で削除される
Deleted branch aaa (was 3d9df20).
Deleted branch bbb (was 3d9df20).
Deleted branch ccc (was 3d9df20).
Deleted branch ddd (was 3d9df20).
Deleted branch eee (was 3d9df20).
Deleted branch fff (was 3d9df20)
めっちゃ便利〜!
もしControl + Space
が他でアプリで使用している場合は、peco のキーマップ設定を変更することも可能です。
まとめ
実は最初はシェルスクリプトで同じことをしていたのですが、既存ライブラリでもっと楽にできるのでは?と考えていたら、pecoでサクッとできた。peco, 便利ですね。