当我在Git中使用bash自动完成时,它会不断向我展示我不再拥有的旧遥控器的分支。当我执行git branch -la
时,它会显示那些旧的遥控器和分支,而git branch -l
则不会。 ls .git/refs/remotes/
也会显示它们。但是,它们不存在于我的 .git / config 中,并且在我运行git remote show
时它们都没有显示。
那么我如何摆脱它们,因为我的自动完成列表现在太长了。
我已经尝试过了:
git reflog expire --expire=now --all
git gc --prune=now
rm .git/refs/remotes/theoldremote
git remote prune theoldremote
我也知道我可以重新克隆回购但这只是作弊; - )
答案 0 :(得分:121)
如果在远程存储库中删除了分支,Git不会自动删除(本地)远程跟踪分支。此外,在V2.0.1之前远程跟踪分支在某些情况下,当您从git配置中删除远程时,不会删除远程跟踪分支(请参阅VonC的答案)。
要删除其中一个远程存储库的过时远程跟踪分支(在远程存储库中删除的分支),请运行
git remote prune <remote>
引用手册页或git remote
:
修剪
删除&lt; name&gt;下的所有陈旧跟踪分支。这些陈旧的分支有 已从&lt; name&gt;引用的远程存储库中删除, 但仍在“遥控器/&lt; name&gt;”中本地可用。
使用--dry-run选项,报告将修剪哪些分支,但是 实际上并没有修剪它们。
但是,根据您的问题,您似乎手动删除了.git/refs/remotes/theoldremote
,因此Git不再了解远程跟踪分支所属的远程存储库。那不是你应该怎么做的。
删除远程存储库的常规方法是运行
git remote rm <remote>
这将从.git/config
中移除遥控器,并将删除远程跟踪分支。
如果您只是删除.git/refs/remotes/
下的目录,分支将留在后面。然后您需要手动删除它们:
git branch -rd <remote>/<branchname>
您需要选项-r
才能删除远程分支。
答案 1 :(得分:16)
我用
git push origin :remote_branch
从服务器中删除分支。
git remote prune origin
删除服务器上不存在的远程引用
答案 2 :(得分:6)
注意:虽然git remote prune是答案,但要知道,从git 2.0.1开始(2014年6月25日),git remote rm
首先删除远程跟踪分支。
所以希望,人们不应该在git remote rm
之后清理旧的分支。
jensl
)
remote rm
:删除远程配置作为最后一个删除遥控器时,请在删除远程配置之前删除远程跟踪分支 这样,如果在删除远程跟踪分支时操作失败或中止,则可以重新运行该命令以完成操作。
但是如果你必须这样做,只要你先设定一个简单的git fetch
即可:
git config --global fetch.prune true
cd /path/to/repo
git config remote.origin.prune true
答案 3 :(得分:4)
将 nothing 推送到分支以删除它:
git push remote :remote_branch
它在文档中的某个地方,但并不是很明显。
或者我误解了你的问题?
答案 4 :(得分:4)
好的我已经知道了。问题是遥控器不再存在,但它们在git数据库中的某个地方。我重新添加了遥控器,然后做了
git remote prune theremote
git remote rm theremote
git gc --prune=now
之后,他们从列表中消失了。不知怎的,在我猜之前我没有正确删除它们。
答案 5 :(得分:0)
当我在服务器端删除的远程分支仍然出现时,我感到困惑:
$ git branch --all
以下命令为我修复了此问题(在git版本2.25.0上):
$ git remote update --prune