Quantcast
Channel: Bashタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 2817

Git マージ済みのブランチを一括削除する

$
0
0

問題

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で出てきたブランチを削除すれば良いわけです。

注意点としては、 masterdevelopmentといった特定のブランチは削除対象外にしたいところです。
git aliasを使っても大丈夫なのですが、 .gitconfigファイルを管理するのが少し面倒だなと感じたのでシェルスクリプトを書きたいと思います。

zshでも bashでも動作しますが、 zshの例で進めます。

~/.zshrcに以下のコードを追加します。

~/.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

ScreenShot 2020-05-31 0.33.26.png

試しに実行するとこんな感じです。

補足: .gitconfig のエイリアスでやる場合

~/.gitconfigの alias 設定でやりたい場合は下記のようにします。

[alias]
    delete-merged-branch = !git branch --merged | egrep -v '\\*|master|development' | xargs git branch -d
$ git delete-merged-branch

Git関連の記事まとめ


Viewing all articles
Browse latest Browse all 2817

Trending Articles