質問: gitで開発中のブランチが多くなってきたのでリモートで消されたブランチが手元で残ってしまう件を解消するの記事を参考にgithub上のプルリクでmerge済みでクローズになっているブランチを消去しようとしたところ,ローカルのブランチを整理しようとしたところ,以下のように,消されずに残ってしまうブランチがありました。 ``` git remote prune origin後 ローカルのブランチ master hotfix/validation_check_for_nil hotfix/validation_check_robustly hotfix/fix_bug_with_validation リモートのブランチgit branch -aの出力結果 remotes/origin/master remotes/origin/hotfix/fix_bug_with_validation ``` このように,remotes/origin/hotfix/fix_bug_with_validationとmasterのように両方で存在しているものは残るのですが,ローカルにクローズされてるブランチまで残ってしまいます。--mergedとgrepを使って手動で消せばいいとは思うのですが,この原因が解らないままにするのも気持ち悪いのでもしご存知の方がいらっしゃれば教えていただきたいです。
回答: `git remote prune origin` はremotes/*のブランチを削除する機能なので、ローカルのブランチは明示的に削除する必要があります。 何故ローカルのブランチは明示的に削除する必要があるかというと、 ローカルブランチはcheckoutやbranchなどのコマンドで明示的に作られるからです。 対してremotes/*ブランチはfetchコマンド等を呼んだときに自動的に作られます。 余談ですが、 `git fetch --prune` はgit1.6.6以降の機能でgit remote prune originと同様の動作になりますが、 origin以外のremote repositoryでも有効なので、こちらの方がおすすめです。