[英]Remove old remote branches from Git
当我在 Git 中使用 bash 自动完成功能时,它不断向我显示我不再拥有的旧遥控器的分支。 当我执行git branch -la
它会显示那些旧的遥控器和分支,而git branch -l
则不会。 ls .git/refs/remotes/
也显示了它们。 但是,它们不存在于我的.git/config 中,并且当我运行git remote show
时它们也不git remote show
。
那么我如何摆脱它们,因为我的自动完成列表现在太长了。
我已经尝试过:
git reflog expire --expire=now --all
git gc --prune=now
rm .git/refs/remotes/theoldremote
git remote prune theoldremote
我也知道我可以重新克隆 repo 但这只是作弊;-)
如果分支在远程存储库中被删除,Git 不会自动删除(本地)远程跟踪分支。 此外,在 V2.0.1 之前,当您从 git 配置中删除远程时,在某些情况下不会删除远程跟踪分支(请参阅 VonC 的回答)。
要删除远程存储库之一的陈旧远程跟踪分支(在远程存储库中删除的分支),请运行
git remote prune <remote>
引用手册页或git remote
:
修剪
删除 <name> 下的所有陈旧跟踪分支。 这些陈旧的分支已经从 <name> 引用的远程存储库中删除,但在“remotes/<name>”中仍然可以在本地使用。
使用 --dry-run 选项,报告将修剪哪些分支,但实际上并不修剪它们。
但是,从您的问题来看,您似乎手动删除了.git/refs/remotes/theoldremote
,因此 Git 不再知道远程跟踪分支所属的远程存储库。 这不是你应该做的。
删除远程存储库的正常方法是运行
git remote rm <remote>
这将从您的.git/config
删除远程,并将删除远程跟踪分支。
如果您只是删除.git/refs/remotes/
下的.git/refs/remotes/
,则分支将保留。 然后你需要手动删除它们:
git branch -rd <remote>/<branchname>
您需要选项-r
来删除远程分支。
我用
git push origin :remote_branch
从服务器中删除一个分支。
git remote prune origin
删除服务器上不再存在的远程引用
注意:虽然 git remote prune 是答案,但要知道,从 git 2.0.1(2014 年 6 月 25 日)开始, git remote rm
通过删除远程跟踪分支开始。
因此,希望人们不必在git remote rm
之后清理旧分支。
请参阅Jens Lindström ( jensl
) 提交的 b07bdd3
remote rm
: 删除远程配置作为最后一个删除远程时,请先删除远程跟踪分支,然后再删除远程配置。
这样,如果操作失败或在删除远程跟踪分支时中止,则可以重新运行该命令以完成操作。
但是,如果必须,一个简单的git fetch
就足够了,前提是您已先设置:
git config --global fetch.prune true
cd /path/to/repo
git config remote.origin.prune true
什么都不推送到一个分支来删除它:
git push remote :remote_branch
它在文档中的某个地方,但并不是很明显。
还是我误解了你的问题?
好的,我知道了。 问题是遥控器不再存在,但它们在 git 数据库中的某个地方。 我重新添加了遥控器,然后做了
git remote prune theremote
git remote rm theremote
git gc --prune=now
之后,它们从列表中消失。 不知何故,我在猜测之前没有正确删除它们。
当我运行时,在服务器端删除的远程分支仍然出现时,我感到困惑:
$ git branch --all
以下命令为我解决了这个问题(在 git 版本 2.25.0 上):
$ git remote update --prune
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.