LoginSignup
703
445

More than 1 year has passed since last update.

Gitでマージ済みブランチを一括削除

Last updated at Posted at 2015-03-19

目的

Gitのブランチはマージしても消えてくれないので定期的に掃除しないとゴミが残ってうざい。
というわけで、さくっと消す方法。

ローカルでマージ済みブランチの一覧を表示

git branch --merged

※消したいのは↑で出てきたブランチ一覧。

一括削除

git branch --merged|egrep -v '\*|develop|main'|xargs git branch -d

※develop と main は消さないようにしています。
※これでスッキリしますが、毎回これ書くのは辛い。

.gitconfig にalias (2021/05/18 ブランチ名の修正他)

.gitconfigに以下を追加

[alias]
       delete-merged-branch = "!f () { git checkout $1; git branch --merged|egrep -v '\\*|develop|main'|xargs git branch -d; };f"

これで、 git delete-merged-branch develop とやると`
1. developにcheckoutし、
2. merge済みブランチを一括削除

します。

delete-merged-branch はaliasなので好きな名前をつければいいです。(自分は、 vacuum とつけています)
スクリプト内の、 develop|main 部分は消したくないブランチ名をパイプでつなげて複数記述すればマージ済みでも削除されません。

e.g.) release main ブランチをブロックしたい場合。
delete-merged-branch = "!f () { git checkout $1; git branch --merged|egrep -v '\*|release|main'|xargs git branch -d; };f"

また、引数にブランチ名を指定すれば複数の機能をまとめたFeatureブランチにチェックアウトしたあと、そのブランチにマージ済みのブランチを消すことができます。
e.g.) git delete-merged-branch hoge-features # hoge-featuresに checkout しマージ済みのブランチを削除

補足

リモートブランチを消しても、git branch -a で出てくるリモート追跡ブランチを消す方法

git fetch --prune

補足の補足(2021/05/18追記)

自分の .gitconfigalias では git fetch --prune も組合わせています

[alias]
   vacuum = "!f () { git checkout $1; git branch --merged|egrep -v '\\*|develop|main'|xargs git branch -d; git fetch --prune; };f"
703
445
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
703
445