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