407
Help us understand the problem. What are the problem?

posted at

updated at

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

目的

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"
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
Sign upLogin
407
Help us understand the problem. What are the problem?