【发布时间】:2011-11-01 11:38:30
【问题描述】:
命令git branch -a 列出了一堆不在存储库中的分支,而不是本地分支。如何删除这些?
* develop
master
remotes/origin/cloner
例如,remotes/origin/cloner 曾经存在于 repo 中,但它已被删除,我希望在输入 git branch -a 时不要出现它。
【问题讨论】:
标签: git
命令git branch -a 列出了一堆不在存储库中的分支,而不是本地分支。如何删除这些?
* develop
master
remotes/origin/cloner
例如,remotes/origin/cloner 曾经存在于 repo 中,但它已被删除,我希望在输入 git branch -a 时不要出现它。
【问题讨论】:
标签: git
如果您有远程跟踪分支(如本例中的origin/cloner)在远程存储库中删除相应分支后留下,您可以删除所有此类远程跟踪分支:
documentation for git remote 解释为:
删除
下所有过时的远程跟踪分支。这些陈旧的分支已从 引用的远程存储库中删除,但仍可在本地“remotes/ ”中使用。 使用
--dry-run选项,报告将修剪哪些分支,但实际上并不修剪它们。
【讨论】:
要删除不再需要的分支,您可以使用以下命令:
git branch -d -r origin/cloner
【讨论】:
git branch -d -r origin/cloner,因为origin/cloner 是一个远程跟踪分支。
你也这样做
git push origin :cloner
删除不需要的远程分支
【讨论】:
cloner已经从远程存储库中删除了,所以这会产生错误。问题是如何删除远程跟踪分支origin/cloner,这是有人在origin 中删除cloner 后留下的。
如果您想保留 main 和 develop 分支并从 git 存储库中删除所有本地分支,那么这可能会有所帮助。
删除所有本地分支除了 main和develop:
git branch -a | egrep -v "(^\*|main|develop)" | xargs git branch -d
【讨论】:
也可能发生远程存储库引用已从本地克隆中删除,但仍出现在“git branch -a”命令的输出中。 在任何情况下,您都可以通过删除相应的文件来抑制任何引用:
$ rm -f .git/refs/remotes/cloner
$ rm -rf .git/refs/remotes/deprecated_remote
【讨论】:
.git 下删除文件而不是使用瓷器命令这样做是个坏主意。