Help us understand the problem. What is going on with this article?

任意の複数ブランチを一括削除したい件

困ったこと

気づくと手元にブランチがたくさん存在した状態となり、一個ずつ git branch -d hoge としていくのは手間だなぁと感じることが多々ありました。同僚に同じような悩みがないか聞いたところ、masterなど特定のブランチ以外を一括で削除するスクリプトを使うとのことでしたが、それだと作業中のブランチも削除されてしまうので自分の期待通りではありませんでした。

$ git branch
  hoge
  hoge1
* hoge10
  hoge2
  hoge3
  hoge4
  hoge5
  hoge6
  hoge7
  hoge8
  hoge9
  master

やりたいこと

  1. 何かコマンドを叩く
  2. ブランチ一覧が表示される(絶対に削除しないブランチは事前にフィルターしておく
  3. ブランチ一覧上で任意のブランチ複数個を簡単に選択できる
  4. エンターキーを押したら任意のブランチが一括で削除される
  5. :tada:

解決方法

課題はブランチ一覧上で任意のブランチを複数個選択する方法だったが、 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, 便利ですね。

hypermkt
PHPer, Vue.js, Laravel, Rails, React, React Native Wantedly: https://www.wantedly.com/users/137030 Speakerdeck: https://speakerdeck.com/hypermkt
https://blog.hypermkt.jp/
smarthr
社会の非合理を、ハックする。
https://smarthr.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away