使用时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