むにえる牧場

毎日むにえるをつくっています

Gitでmasterとdevelopにmerge済みのbranchを消すワンライナー

タイトル通りです。

merge済みのbranchを削除するコマンド

git fetch | cat <(git branch --merged origin/master --format "%(refname:short)") <(git branch --merged origin/develop --format "%(refname:short)") | sort | uniq | grep -vE '^\*|master$|develop$' | xargs -p -I % git branch -d %
  1. git fetchでリモートブランチの追跡を最新にする
  2. git branch --merged origin/develop でリモートのdevelop branchにmergeしてあるbranchを一覧で出す
  3. 今現在いるbranchについては*印がついたりするので、--formatで余分な情報を削ぎ落とす
  4. masterについても同様のことを行う
  5. catコマンドを利用して 3. 4. のコマンド結果を結合
  6. sort uniqコマンドを利用して重複を排除
  7. grepコマンドを利用してmasterdevelopを排除
  8. 残ったbranch名が、今回削除したいbranchになるので、git branch -dで削除

xargs-I をつけることで削除する前に確認が入るようにしているが、確認がいらない場合はオプションを消してください。

おわりに

完全にノルマ達成のために作ったワンライナーです。
本当にありがとうございました。

とはいえ、意外と利用する場面は多いのではないかと思って記事投稿です。