を使用するgit push origin :staleStuff
と、自動的に削除origin/staleStuff
されるため、を実行するgit remote prune origin
と、他の誰かによって削除されたブランチが削除されました。git prune
削除したブランチを削除するために、同僚が実行する必要がある可能性が高くなります。
では、正確には何をするのgit remote prune
でしょうか?主なアイデア:ローカルブランチ(トラッキングブランチではない)はgit remote prune
コマンドによって変更されないため、手動で削除する必要があります。
ここで、理解を深めるための実際の例を示します。
2つのブランチを持つリモートリポジトリがあります:master
とfeature
。両方のブランチで作業していると仮定します。その結果、ローカルリポジトリにこれらの参照があります(混乱を避けるために完全な参照名が付けられています)。
refs/heads/master
(短縮名master
)
refs/heads/feature
(短縮名feature
)
refs/remotes/origin/master
(短縮名origin/master
)
refs/remotes/origin/feature
(短縮名origin/feature
)
さて、典型的なシナリオ:
- 他の開発者は、のすべての作業を終了し、それをリモートリポジトリ
feature
にマージして、リモートリポジトリからブランチmaster
を削除します。feature
- デフォルトでは、実行
git fetch
(またはgit pull
)すると、ローカルリポジトリから参照が削除されないため、これら4つの参照すべてが引き続き保持されます。
- それらをクリーンアップして実行することにしました
git remote prune origin
。
- gitは
feature
ブランチが存在しないことを検出するため、削除する必要refs/remotes/origin/feature
のある古いブランチも検出します。
- これで、参照が削除されない
refs/heads/feature
ため、を含む3つの参照があります。git remote prune
refs/heads/*
branch.<branch_name>.merge
設定パラメータにより、リモートトラッキングブランチに関連付けられているローカルブランチを識別することができます。このパラメーターは、(おそらくを除いてgit pull
)何かが機能するために実際には必要ないため、欠落している可能性があります。
(コメントからの例と有用な情報で更新されました)