git remote prune–没有像我预期的那样显示出许多修剪过的分支
从手册页:
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
但是,只修剪了一个地方分支。 有些分支是由我创造的,有些是由同事创造的。 这是否表明我没有正确地跟踪这些分支?
当你使用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
configuration参数可以识别与远程跟踪分支关联的本地分支。 这个参数对于任何工作都是不需要的(可能除了git pull
),所以它可能会丢失。
(更新与来自评论的例子和有用的信息)