从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

我也意识到,我可以重新克隆回购,但这只是作弊;-)


如果分支在远程存储库中被删除,Git不会自动删除(本地)远程跟踪分支。 此外,在V2.0.1之前,远程跟踪分支在某些情况下不会从您的git配置中移除远程设备时被删除(请参阅VonC的答案)。

要删除其中一个远程存储库的陈旧远程跟踪分支(远程存储库中已删除的分支),请运行

git remote prune <remote>

引用man page或git remote

修剪

删除<名称>下的所有陈旧跟踪分支。 这些陈旧的分支已从<名称>引用的远程存储库中删除,但仍在本地“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之后,不应该清理旧分支。

参见JensLindström( jensl )的commit b07bdd3

remote rm :删除远程配置作为最后一个

删除远程时,请在删除远程配置之前删除远程跟踪分支。
这样,如果操作失败或在删除远程跟踪分支时被中止,则可以重新运行该命令以完成操作

链接地址: http://www.djcxy.com/p/26001.html

上一篇: Remove old remote branches from Git

下一篇: Remove local branches no longer on remote