Gitでmasterブランチにマージ済みのローカルブランチを一括削除する

2023-05-07Bash,Git

はじめに

Gitでは容易にブランチを作成し、切り替えることができます。
ただ、容易にブランチを作成できるがゆえに、不要なブランチがわかりにくく、残ってしまうことがあります。

すでにmasterブランチにマージされているが、ローカルに残ってしまったブランチ を掃除するためのコマンドを紹介します。

※実行前には、実行結果を確認してください!自己責任でお願いします!

検証環境

$ uname -moi
x86_64 x86_64 GNU/Linux

$ bash -version | head -n 1
GNU bash, version 4.2.46(2)-release (x86_64-redhat-linux-gnu)

$ git --version
git version 1.8.3.1

masterブランチマージ済みのローカルブランチを削除

まずはローカルブランチを対象とした掃除の方法について。

git branch --merged master コマンドでmasterブランチにマージ済みのローカルブランチを出力できます。
ここから カレントブランチmasterブランチdevelopブランチ を除外します。

最後に該当のブランチ名を git branch -d で1つずつ削除していきます。

git branch --merged master \
  | sed -n 's@^\s*@@p' \
  | grep -v -e '^\*' -e '^\(master\|develop\)$' \
  | xargs -n 1 git branch -d

masterブランチマージ済みのoriginリモートブランチを削除

すでにpush済みのリモートブランチを対象とした掃除の方法について。

今度は git branch --remotes --merged master でマージ済みのリモートブランチを出力しますが、 origin ブランチ飲みに絞り込みます。
最後に git push --delete origin <branch_name> コマンドで削除を行います。

git branch --remotes --merged master \
  | sed 's@^\s*@@' \
  | sed -n 's@^origin/@@p' \
  | grep -v -e '^\*' -e '^\(master\|develop\)$' -e '^HEAD ' \
  | xargs -n 1 git push --delete origin

masterブランチマージ済みのupstreamリモートブランチを削除

こちらは利用するケースは更に低いと思いますが、すでにpush済みのリモートブランチを対象とした掃除の方法について。

先程の origin の文字が upstream に置換されているだけです。

git branch --remotes --merged master \
  | sed 's@^\s*@@' \
  | sed -n 's@^upstream/@@p' \
  | grep -v -e '^\*' -e '^\(master\|develop\)$' -e '^HEAD ' \
  | xargs -n 1 git push --delete upstream

ひとこと

実行前には必ず、 xargs コマンドで実行される git コマンドが正しいかどうを確認するために xargs -n 1 echo git ... のように書き直して実行してみてください。

2023-05-07Bash,Git