从手册页:
Deletes all stale tracking branches under <name>. These stale branches have already been removed from the remote repository referenced by <name>, but are still locally available in "remotes/<name>".
所以我使用
删除了一堆分支git push origin :staleStuff
然后跑
git remote prune origin
但是,只修剪了一个本地分支。其中一些分支是由我创建的,一些是由同事创建的。这是否表明我首先没有正确跟踪这些分支?
答案 0 :(得分:185)
当您使用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
。feature
分支不再存在,因此refs/remotes/origin/feature
是陈旧分支,应删除。 refs/heads/feature
,因为git remote prune
不会删除任何refs/heads/*
引用。可以通过branch.<branch_name>.merge
配置参数识别与远程跟踪分支相关联的本地分支。任何工作都不需要此参数(可能除了git pull
),因此可能会丢失。
(使用示例和评论中的有用信息进行更新)