删除由git branch -a列出的分支

21

命令git branch -a列出了一堆既不在代码库中,也不是本地分支的分支。如何删除这些分支?

* develop
  master
  remotes/origin/cloner
例如,在该仓库中曾经存在 remotes/origin/cloner 分支,但是它已经被删除了,我希望在输入 git branch -a 命令时不要显示它。
5个回答

30

如果您在远程仓库中删除了分支(例如此处的 origin/cloner),但是留下了对应的远程跟踪分支,您可以使用以下命令删除所有此类远程跟踪分支:

git remote prune origin

git remote 的文档 对此进行了解释:

删除 <name> 下所有过期的远程跟踪分支。这些过期的分支已经从引用 <name> 的远程仓库中删除,但仍然在“remotes/<name>”中本地可用。

使用--dry-run选项可以报告将要被修剪的分支名称,但不会实际修剪它们。


4
值得进一步扩展这一点,也许可以通过引用和链接到文件来实现。 - Mark Longair

3
要删除不再需要的分支,您可以使用以下命令:
git branch -d -r origin/cloner

1
这需要使用 git branch -d -r origin/cloner 命令,因为 origin/cloner 是一个远程跟踪分支。 - Mark Longair

0
如果您想保留maindevelop分支并从git存储库中删除所有本地分支,则可能会有所帮助。
删除除maindevelop之外的所有本地分支: git branch -a | egrep -v "(^\*|main|develop)" | xargs git branch -d

0

你也可以这样做

git push origin :cloner 

删除不需要的远程分支


在这种情况下,分支“cloner”已经从远程仓库中删除,因此这将产生错误。问题是要求如何删除远程跟踪分支“origin/cloner”,该分支是在某人删除“origin”中的“cloner”后剩余的。 - Mark Longair
我明白了。那么,git fetch 不就只是刷新远程分支列表吗? - Patrick

-5

有时远程存储库引用已经从本地克隆中删除,但仍然出现在“git branch -a”命令的输出中。 无论如何,您始终可以通过删除相应的文件来抑制任何引用:

$ rm -f .git/refs/remotes/cloner
$ rm -rf .git/refs/remotes/deprecated_remote

зӣҙжҺҘд»Һ.gitдёӢеҲ йҷӨж–Ү件иҖҢдёҚдҪҝз”Ёз“·еҷЁе‘Ҫд»ӨиҝӣиЎҢж“ҚдҪңжҳҜдёҖдёӘдёҚеҘҪзҡ„жғіжі•гҖӮ - Mark Longair
Git非常强大。通常情况下,编辑.git/config文件非常方便,例如为给定分支添加跟踪或更改远程存储库的URL。 通过直接查看内部工作原理,可以更轻松地理解Git的工作原理,并意识到它并不像第一次看到时那么神奇。 因此,我不建议每个人都在底层编辑Git文件,但我建议他们至少查看这些文件。最低限度,这非常有益。 - Denis Arnaud

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