年の瀬になると一年の振り返りや身の回りの整理をする人も多いのではないでしょうか。Git のブランチも同じく、いつの間にか 不要なブランチが増えて しまっていることがあるかと思います。そこで今回は、不要なローカルブランチを一括で削除する方法と、そのコマンドがどう動いているのかを詳しく解説します。
ローカルブランチ一括削除コマンド
git branch --format='%(refname:short)' \
| grep -vE '^(master|main|develop)$' \
| xargs git branch -d
コマンド解説
1. git branch --format='%(refname:short)'
ローカルのブランチ名を、短縮形式(refs/heads/xxx ではなく xxx だけ)で出力するコマンドです。
-
%(refname:short)は、ブランチの完全な参照名(例:refs/heads/feature/something)を 短縮形(例:feature/something)に変換します。 -
:shortオプションがない場合、refs/heads/が付いたフルネームが出力されてしまい、後続の処理で文字列が一致しないなどの問題が発生する可能性があります。 - 参照
git branch --format='%(refname:short)'
この時点で ローカルブランチの一覧 を取得できます。
2. grep -vE '^(master|main|develop)$'
取得したブランチリストから 特定のブランチ名を除外 します。
-
-vオプションは、マッチしない行を出力 します。 -
-Eオプションは、拡張正規表現 を有効にします。 -
'^(master|main|develop)$'は、行の先頭から末尾まで 完全に "master"、"main"、"develop" のいずれかに一致する行を指定します。
したがって、この正規表現でマッチする master, main, develop は出力から除外されることになります。必要に応じて、削除したくないブランチがあれば追加してください。
3. xargs git branch -d
xargs コマンドは、標準入力から受け取った文字列を引数として別のコマンドに渡す 役割を果たします。
ここでは、フィルタリング後のブランチ名を git branch -d にまとめて渡すことで、ローカルブランチを一括削除します。
xargs git branch -d
-
-dは安全な削除で、未マージのコミットがあるブランチは削除できません。エラーが表示され、削除が中断されます。 - 未マージブランチを強制的に消したい場合は
-Dを使用しますが、十分注意しましょう。
実行手順まとめ
-
削除対象でないブランチにチェックアウト
git checkout main -
まとめて削除を実行
git branch --format='%(refname:short)' \ | grep -vE '^(master|main|develop)$' \ | xargs git branch -d -
エラーが出たブランチを強制削除したい場合
git branch --format='%(refname:short)' \ | grep -vE '^(master|main|develop)$' \ | xargs git branch -D
注意点
-
チェックアウト中のブランチは削除できません。
事前に削除しないブランチへ切り替えておきましょう。 -
未マージコミットの有無を要確認
-dだと削除できずにエラーとなり、-Dだと強制削除されます。必要なコミットが含まれていないか慎重に判断してください。 -
後から復元する方法はあるが手間がかかる
万が一間違えて削除してしまった場合、git reflogやローカルのログで復旧できることがありますが、気をつけるに越したことはありません。
まとめ
- 年末は身辺整理だけでなく、ローカルブランチの整理 もやってみませんか?
- 今年中にローカルブランチをスッキリさせて、新たな気持ちで新年を迎えましょう。
よいお年をお迎えください!