不要になったブランチを整理する
マージ済みのローカルブランチやリモート追跡ブランチを安全に削除する方法
マージ済みのローカルブランチを削除する
feature ブランチが main にマージされたら、もうそのブランチは不要です。
git branch -d で安全に削除できます。
-d はマージ済みのブランチだけを削除するので、まだマージしていないブランチをうっかり消す心配はありません。
# マージ済みのブランチを削除
git branch -d feature/login
# マージ済みのブランチを一覧表示
git branch --merged main
# main 以外のマージ済みブランチをまとめて削除
git branch --merged main | grep -v "main" | xargs git branch -d未マージのブランチを強制削除する
試作やボツになったブランチなど、マージせず捨てたいブランチは -D(大文字)で強制削除できます。
# 未マージでも強制削除
git branch -D feature/experimentリモートで削除されたブランチをローカルから消す
GitHub 上で Pull Request をマージした後、リモートのブランチは削除されることが多いですが、ローカルには origin/feature/xxx という追跡ブランチが残り続けます。
git fetch --prune でリモートに存在しないブランチの追跡情報を自動的に削除できます。
放置しても動作に影響はありませんが、git branch -r の一覧が肥大化して見づらくなったり、削除済みブランチに間違えてチェックアウトしてしまうなど、地味に困るポイントがあります。
# リモートに存在しない追跡ブランチを削除
git fetch --prune
# 同じ効果(明示的に prune だけ実行)
git remote prune origin
# 常に prune するように設定
git config --global fetch.prune true自分のローカルブランチは消えない
git fetch --prune で消えるのは remotes/origin/xxx というリモート追跡参照だけです。
自分が作業中のローカルブランチは一切影響を受けません。
| ブランチの種類 | 例 | prune で消える? |
|---|---|---|
| ローカルブランチ(作業中) | feature/login |
消えない |
| まだ push していないローカルブランチ | feature/new |
消えない |
| リモート追跡参照(リモートで削除済み) | origin/feature/old |
消える |
| リモート追跡参照(リモートに存在する) | origin/main |
消えない |
「自分が今作っているブランチが勝手に消えるのでは?」と心配になるかもしれませんが、ローカルブランチとリモート追跡参照は完全に別物なので、安心して実行できます。
リモートのブランチを削除する
ローカルからリモートのブランチを直接削除することもできます。
GitHub の UI で削除する代わりに、コマンドラインから操作したい場合に使います。
# リモートのブランチを削除
git push origin --delete feature/login注意点
-dと-Dを間違えない-dはマージ済みのブランチだけを削除します。未マージのブランチを消そうとするとエラーになるので安全です。-Dは確認なしで強制削除するので、本当に不要か確認してから使いましょう。mainやdevelopを削除しないまとめて削除する場合は
grep -vで保護対象のブランチを除外しましょう。他のメンバーが使っているブランチを消さない
リモートのブランチを削除する前に、他のメンバーがまだ作業中でないか確認しましょう。
Git Ready