使用时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一个过时的分支。
- 现在您有3个参考,包括
refs/heads/feature,因为git remote prune不会删除任何refs/heads/*参考。
通过branch.<branch_name>.merge配置参数可以识别与远程跟踪分支关联的本地分支。确实不需要使用此参数(可能除外git pull),因此它可能会丢失。
(已更新示例和评论中的有用信息)
git remote show origin并查找标记为任何分支stale