繁体   English   中英

从 Git 中删除旧的远程分支

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM