Git マージ済みのブランチを一括削除する
問題
Gitのブランチはリモートリポジトリでマージされても自動的に削除されないので自分で削除する必要があります。
環境
$ git --version
git version 2.26.2
予備知識
マージ済みのブランチを表示
$ git branch --merged
補足: マージしてないブランチを表示
$ git branch --no-merged
補足: リモートリポジトリも含めてすべてのブランチの一覧を表示
$ git branch --all
$ git branch -a
ブランチを削除する
$ git branch -d feature/issue-xxx
$ git branch -D feature/issue-xxx
-d
オプションはマージされていないブランチは削除されません。
-D
オプションはマージされていないブランチも強制的に削除します。
リモートリポジトリで削除されているブランチを削除する
git featch
する際に prune
オプションを付けると削除済みのブランチを削除してくれます。
$ git fetch --prune
$ git fetch -p
補足: 常にpruneオプションを有効にする
$ git config --global fetch.prune true
本題
git fetch --prune
でリモートリポジトリで削除済みのブランチを削除したあと git branch --merged
で出てきたブランチを削除すれば良いわけです。
注意点としては、 master
や development
といった特定のブランチは削除対象外にしたいところです。
git alias
を使っても大丈夫なのですが、 .gitconfig
ファイルを管理するのが少し面倒だなと感じたのでシェルスクリプトを書きたいと思います。
zsh
でも bash
でも動作しますが、 zsh
の例で進めます。
~/.zshrc
に以下のコードを追加します。
PROTECT_BRANCHES='master|development'
git-delete-merged-branch() {
git fetch --prune
git branch --merged | egrep -v "\*|${PROTECT_BRANCHES}" | xargs git branch -d
}
保護したいブランチは PROTECT_BRANCHES
の環境変数に |
区切りで追加してください。
シェルの設定ファイルを読み直します。
$ exec $SHELL -l
コマンドを実行します。(Gitが管理しているディレクトリ内で実行してください)
$ git-delete-merged-branch
試しに実行するとこんな感じです。
補足: .gitconfig のエイリアスでやる場合
~/.gitconfig
の alias 設定でやりたい場合は下記のようにします。
[alias]
delete-merged-branch = !git branch --merged | egrep -v '\\*|master|development' | xargs git branch -d
$ git delete-merged-branch
Git関連の記事まとめ
Author And Source
この問題について(Git マージ済みのブランチを一括削除する), 我々は、より多くの情報をここで見つけました https://qiita.com/ucan-lab/items/97c53a1a929d2858275b著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .