git fetchした時に既に削除されているリモートブランチがローカルにそのまま残り続けるのつらい
おひさしぶりです。
Git/Githubを使って多人数で開発をしていると、「リモートでは削除されているのにローカルに残り続けているのでgit branch -a
とかやるととんでもない量のブランチが表示される」という事案が発生します。
私は当該リモートブランチにcheckoutして動作を確認したりテストが通るかどうか試したりするため、基本的にgit fetch
を多用します。
git fetch
は基本的にリモートにあるブランチ類をローカルブランチにインポートするコマンドですが、「インポート」なのでローカルにリモートのブランチはたまり続けます。
git fetch
はリモートからブランチが消えた時にローカルと同期を取って消してくれるという優しさは持ち合わせてるわけではないんですね。
そこで調べると、やはりありました。
Git - git-fetch Documentation
git fetch
のオプションとして-p
または--prune
が用意されています。
After fetching, remove any remote-tracking references that no longer exist on the remote. Tags are not subject to pruning if they are fetched only because of the default tag auto-following or due to a --tags option. However, if tags are fetched due to an explicit refspec (either on the command line or in the remote configuration, for example if the remote was cloned with the --mirror option), then they are also subject to pruning.
つまり、fetch後にリモートに参照先がないオブジェクトの場合は消してしまうというものです。
これでとりあえずリモート上では消されたはずの数多くのブランチは消えます。
ただ、fetchするときにgit fetch -p
とかいちいち-p
打つのめんどくさくない?alias設定しろよ
そこで探しているとこんな記事を見つけました。
Gitのfetch/pullサブコマンドで--pruneオプションをデフォルトにする - Weblog - Hail2u.net
しゅごい。
これでただ単にgit fetch
しただけで自動的に-p
されることになります。
ここまで書いて気づいたのですが、もしかして「リモートでは既に消されてしまったが、もしかしたらあのブランチの方がよいかもしれない。君、git fetchしていたよね。あのブランチをpushしてもらえないか?」という状況ももしかしたらある……????
じゃぁ!