チーム開発でGitを使っていると、「リモート(GitHubなど)ですでに削除されたはずのブランチが、手元の環境にいつまでも残り続けている」という経験はありませんか?
git branch -r コマンドでリモートのブランチ一覧を見たとき、すでにマージされて消えたはずの古いブランチが大量に表示されてしまう……。
今回は、そんな「幽霊ブランチ」をスッキリ掃除してくれるコマンド git fetch --prune の意味と、毎回入力しなくて済むようになるおすすめの自動化設定について解説します。
そもそも git fetch --prune とは?
一言で言うと、「リモート側ですでに削除されたブランチを、ローカルの追跡ブランチ(origin/〜)からも自動で削除して同期するコマンド」 です。
通常の git fetch は、リモートリポジトリにある最新のブランチやコミットを「新しく持ってくる」ことしか行いません。
そのため、他のメンバーが開発を終えて不要になったブランチ(例: feature/login など)をリモートで削除しても、あなたのローカル環境にある origin/feature/login という情報は自動では消えずに残り続けてしまうのです。
この --prune(枝打ち・剪定の意味)オプションを付けることで、リモートの最新状態と手元の状態を完全に一致させ、不要なゴミを削除することができます。
「自分のローカルには main ブランチしかない」場合でも意味はある?
「自分はローカルで main ブランチしか使っていないから、他のブランチの掃除は関係ないのでは?」と思うかもしれません。
しかし、結論から言うと大いに意味があります。 その理由は以下の2点です。
1. 裏側に「リモート追跡ブランチ」が溜まっていくから
Gitには、あなたが直接作業するローカルの main ブランチとは別に、裏側で origin/main や origin/feature-A といった「リモート追跡ブランチ」が自動的に作られています。
チームの誰かがブランチを切って開発し、用済みになってリモートで削除したとしても、あなたが普段 git pull や git fetch をしている限り、あなたのPCの裏側には「すでに存在しないブランチの抜け殻」がどんどん蓄積されていきます。
2. チームの「今」を正確に把握できなくなるから
チーム開発において「今、誰がどのブランチで開発中か」を確認したいとき、古い抜け殻が残っていると、現在アクティブなブランチと、数ヶ月前に消えたはずのブランチが混ざって表示されてしまいます。
また、ターミナルでのブランチ名のTab補完(予測変換)にも不要な候補が出てきてしまい、操作ミスの原因にもなります。
--prune を実行することで、これらが「今本当に存在するブランチ」だけに絞り込まれ、チーム状況を正確に把握できるようになります。
おすすめの解決策:毎回入力しなくて済む「自動化設定」
この --prune ですが、毎回 git fetch --prune と手動で打ち込むのは面倒ですし、忘れがちです。
そこで、Gitの設定を変更して 「常にデフォルトで prune する」 状態にしておくことをおすすめします。
ターミナルで以下のコマンドを一度だけ実行してください。
git config --global fetch.prune true
この設定のメリット
このグローバル設定(--global)をしておけば、今後は意識してオプションを付けなくても、普段通り git fetch や git pull をするだけで、裏側で自動的に古いブランチの掃除が行われるようになります。
あなたが普段通り main ブランチを最新にするついでに、チームメンバーが削除した古いブランチの追跡情報もスッキリ消えるため、常にクリーンで快適なGit環境を保つことができます。
※ちなみに、この機能によって消えるのはあくまで origin/xxx という「リモート追跡ブランチ」だけです。あなたが手元で独自に作って作業しているローカルブランチが勝手に消えることはないので、安心して設定してください。
まとめ
- 通常の
git fetchでは、リモートで削除された古いブランチの履歴がローカル(origin/〜)に残り続けてしまう。 - ローカルで
mainブランチしか使っていなくても、チーム開発をしているならgit fetch --pruneによる定期的な掃除は重要。 git config --global fetch.prune trueを設定しておけば、git pullのついでに全自動で掃除してくれるので超おすすめ!
Gitのブランチ一覧がごちゃごちゃして見づらいと感じている方は、ぜひこの設定を取り入れてみてください!



