当你使用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
),所以它可能会丢失。
(更新了示例和评论中的有用信息)