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个分支的远程存储库: masterfeature 。 假设您正在两个分支上工作,因此在本地存储库中有这些引用(给出了完整的引用名称以避免混淆):

  • refs/heads/master (短名字master
  • refs/heads/feature (短名称feature
  • refs/remotes/origin/master (短名称的origin/master
  • refs/remotes/origin/feature (短名称的origin/feature

现在,一个典型的场景:

  1. 其他一些开发人员完成了该feature所有工作,将其合并到master并从远程存储库中删除feature
  2. 默认情况下,当你做git fetch (或者git pull )时,没有引用被从你的本地仓库中删除,所以你仍然有这4个引用。
  3. 你决定清理它们,然后运行git remote prune origin
  4. git检测feature分支不再存在,所以refs/remotes/origin/feature是一个陈旧的分支应该被删除。
  5. 现在你有3个引用,包括refs/heads/feature ,因为git remote prune不会删除任何refs/heads/*引用。

通过branch.<branch_name>.mergeconfiguration参数可以识别与远程跟踪分支关联的本地分支。 这个参数对于任何工作都是不需要的(可能除了git pull ),所以它可能会丢失。

(更新与来自评论的例子和有用的信息)