概要
開発を進めていると、いつの間にかローカルブランチが増えてしまって管理が大変…なんてこと、よくありますよね。特に、マージ済みのブランチは「いつか消そう」と思ってそのまま放置してしまいがちです。
この記事では、コマンド一発でマージ済みの不要なローカルブランチを一括削除し、開発環境をスッキリさせる方法を紹介します。Mac (Bash/Zsh) と Windows (PowerShell) の両方に対応しています。
なぜマージ済みのブランチを削除する必要があるの?
- 誤操作を防ぐ: マージ済みの古いブランチが残っていると、誤ってそこで作業を開始してしまうミスを防げます。
-
視認性の向上:
git branchを打ったときに必要なブランチだけが表示されるため、目的のブランチが見つけやすくなります。 - Git の動作軽量化: ブランチ数が膨大になると、一部のGUIツールやGitの動作が重くなる場合があります。
マージ済みのローカルブランチを一括削除するコマンド
以下のコマンドをターミナルで実行するだけで、マージ済みのローカルブランチを一括削除できます。
Mac / Linux (Bash, Zsh) の場合
grep の正規表現で、行頭の空白(\s*)を含めて判定するのがポイントです。
git branch --merged | grep -v '*' | grep -vE '^\s*(main|master)$' | xargs git branch -d
Windows (PowerShell) の場合
PowerShell では grep や xargs の代わりに、オブジェクト操作のコマンドを使用します。
git branch --merged | ForEach-Object { $_.Trim() } | Where-Object { $_ -notmatch '^\*|^(main|master)$' } | ForEach-Object { git branch -d $_ }
コマンドの解説
何をしているのか、少し詳しく見ていきましょう。
1. マージ済みブランチの抽出
git branch --merged
マージ済みのブランチ一覧を表示します。ここには、現在作業中のブランチや main ブランチも含まれてしまいます。
2. 除外処理 (フィルタリング)
Mac/Linux の場合:
-
grep -v '*': 現在チェックアウトしているブランチ(行頭に*が付く行)を除外します。 -
grep -vE '^\s*(main|master)$': ここが重要です!-
^: 行頭 -
\s*: 0個以上の空白(git branchの出力はインデントされるため、これが必要です) -
(main|master): main または master ブランチ -
$: 行末 - これらを組み合わせて、「main または master ブランチ」を誤って消さないように除外しています。
-
Windows (PowerShell) の場合:
-
ForEach-Object { $_.Trim() }: ブランチ名の前後にある余分な空白を除去します。 -
Where-Object { $_ -notmatch '^\*|^(main|master)$' }: 正規表現を使い、現在のブランチ(*で始まる)と、main/masterをまとめて除外しています。
3. 削除実行
xargs git branch -d (Mac) / git branch -d $_ (Windows)
フィルタリングして残った「不要なブランチ名」に対して、順番に削除コマンドを実行します。
【重要】実行前の確認(ドライラン)
いきなり削除するのが怖い場合は、最後の「削除コマンド」を外して、消されるブランチの一覧だけを表示してみましょう。
Mac/Linux:
# 削除コマンド(xargs...)を付けずに実行
git branch --merged | grep -v '*' | grep -vE '^\s*(main|master)$'
Windows (PowerShell):
# 削除コマンド(ForEach... git branch -d)を付けずに実行
git branch --merged | ForEach-Object { $_.Trim() } | Where-Object { $_ -notmatch '^\*|^(main|master)$' }
これらを実行して、削除されても問題ないブランチだけが表示されていることを確認してから、本番のコマンドを実行することをおすすめします。
注意点
- 削除したブランチは簡単には復元できません: 実行前には必ず確認を行いましょう。
-
マージされていないブランチは消えません: 今回使用している
git branch -d(小文字のd)は安全策のため、マージされていない変更が残っているブランチは削除エラーになります(無理やり消す-Dは使いません)。 - リモートブランチは削除されません: この操作はあくまで「ローカルマシン上」の整理です。リモートリポジトリ(GitHubなど)には影響しません。