GIT:删除没有本地跟踪分支的远程分支

5
假设git branch -a输出如下内容:
  • A
  • B
  • C
  • *master
  • remotes/origin/A
  • remotes/origin/B
  • remotes/origin/C
  • remotes/origin/master
  • remotes/origin/X
  • remotes/origin/Y
  • remotes/origin/Z
加粗的是那些在远程仓库中但我尚未检出并且我也没有意图的分支,它们与我不参与的项目相关。
是否有一种命令可以删除所有没有本地跟踪分支的远程分支(指保存在我的仓库中的分支,而不是远程仓库中的实际远程分支)? 编辑:我打算删除保存在我的仓库中的远程分支,以显示分支在远程的存在。我不想删除远程仓库中的实际分支。 编辑2:在mattmilten的评论中进行澄清。
您可以使用git pull重新创建所有远程分支,但我并不总是使用git pull
我经常只使用git fetch origin master A B C,然后合并、变基或者对主分支、A、B或C分支进行任何我想要的操作。
重点是,每当我"git pull"(出于某种原因),我都不想要的所有分支都会被创建,并且似乎没有简单的选项可以在此之后将它们删除。

使用 git push origin :Y 可以删除远程分支。 - Dirk
2个回答

1
不,这是不可能的。关于(所有)分支的信息是您的仓库的一部分,并且在创建新的克隆时始终会被复制。您需要忽略这些分支或者简单地运行git branch来只列出您的本地分支。
如果您删除了关于远程分支存在的信息,那么您以后如何能够检索远程分支呢?

当你执行 "git pull" 命令时,会重新获取所有远程分支。但我并不总是执行 "git pull",而是执行 "git fetch origin master A B C",然后在 A、B 或 C 中合并或变基需要的内容。编辑:问题在于,每当我执行 "git pull"(出于某种原因),所有我不想要的分支都会被创建,似乎没有简单的选项可以完全避免它们。 - Mirek
1
重点是,远程分支并没有真正“创建”在您的本地仓库中。把它们看作虚拟分支。听起来你不喜欢git pull打印出所有这些你不需要的远程分支的输出 - git pull -q可能是一个解决方案... - mattmilten

1
我曾遇到同样的问题,但情况不同。我删除了一个本地分支experiment1。我忘记先运行git branch --unset-upstream命令,所以我仍然有一个远程跟踪分支。之后,分支experiment1从远程中删除了。
后来,当我运行git branch -a时,它仍然在输出中显示为remotes/origin/experiment1。因为本地分支已经消失了,所以无论是git branch --unset-upstream还是git branch --delete都无法将其删除。将其引用为origin/experiment1而不是experiment1也没有起作用。
所以这就是我做的:
1. cd .git/refs/remotes/origin 2. rm experiment1
之后,它不再出现在输出中,并且正常的Git同步命令按预期工作。
我添加了这个答案,因为它是在互联网搜索“git remove remote-tracking branches with no local branch”时的热门结果。此外,这个问题与"Remove tracking branches no longer on remote" question不同,因此不是重复的问题。如果我要写一个与这个答案相符的问题,那么那个问题就是这个问题的重复。

终于有一个不需要实际遥控器的解决方案了! - Mark Jeronimus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接