如何从Git中删除无效的远程分支引用?

在我目前的回购中,我有以下输出:

$ git branch -a * master remotes/origin/master remotes/public/master 

我想从分支列表中删除remotes/public/master

 $ git branch -d remotes/public/master error: branch 'remotes/public/master' not found. 

另外, git remote的输出很奇怪,因为它没有列出public

 $ git remote show origin 

如何从分支列表中删除“远程/公共/主”?

更新,尝试了git push命令:

 $ git push public :master fatal: 'public' does not appear to be a git repository fatal: The remote end hung up unexpectedly 

你可能需要清理

 git gc --prune=now 

或者你可能需要修剪

 git remote prune public 

修剪

删除<name>下的所有陈旧的跟踪分支。 这些陈旧的分支已经从<name>引用的远程存储库中被移除,但是仍然在“remotes / <name>”中本地可用。

使用–dry-run选项,报告哪些分支将被修剪,但是实际上并不修剪它们。

但是,看起来这些应该早就被清理了

 git remote rm public 

R M

删除名为<名称>的远程。 远程的所有远程跟踪分支和configuration设置都被删除。

所以它可能是你手工编辑你的configuration文件,这没有发生,或者你有特权问题。

也许再次运行,看看会发生什么。

build议上下文

如果你看一下修订日志 ,你会注意到我提出了更多的“正确的”技术,无论出于什么原因,他们都不想在他们的存储库上工作。

我怀疑OP已经做了一些让他们的行为变得有点奇怪的不一致的状态,并且git gc被要求修复留下的残留物。

通常, git branch -rd origin/badbranch足够用于本地跟踪分支,或者git push origin :badbranch用于git push origin :badbranch远程分支, 通常你不需要调用git gc

所有你需要做的是

 git fetch -p 

它将删除所有您远程删除的本地分行。

如果你在git 1.8.5以上,你可以自动设置

 git config fetch.prune true 

要么

 git config --global fetch.prune true 
 git push public :master 

这将删除Kent Fredric指出的远程分支。

列出远程追踪分行:

 git branch -r 

要删除远程跟踪分支:

 git branch -rd public/master 

所有你需要做的是

 $ git branch -rd origin/whatever 

就这么简单。 没有理由在这里调用gc。

git gc --prune=now不是你想要的。

 git remote prune public 

或者git remote prune origin #如果那是远程源

是你想要的

当裁判被打包时,接受的答案对我来说不起作用。 但是,

 $ git remote add public http://anything.com/bogus.git $ git remote rm public 

在我的情况下,我试图删除保存在.git/packed-refs条目。 你可以编辑这个纯文本文件,并删除它的git br -D不知道如何触摸(至less在1.7.9.5版本)。

我在这里find了这个解决scheme: https : //stackoverflow.com/a/11050880/1695680

 git push origin --delete <branch name> 

参考: http : //www.gitguys.com/topics/adding-and-removing-remote-branches/

我有一个类似的问题。 没有任何答案有帮助。 在我的情况下,我有两个删除远程存储库永久显示。

我最后的想法是手动删除所有的引用。

可以说这个仓库被称为“回购”。 我做了:

 find .git -name Repo 

并删除相应的文件和目录

 grep Repo -r .git 

这发现了一些文本文件,我删除了相应的行。 现在,一切似乎都很好。

通常你应该离开这个工作混帐。

我不知道git branch -rd ,所以我为自己解决这个问题的方式是将我的回购视为远程回购,并执行远程删除。 git push . :refs/remotes/public/master git push . :refs/remotes/public/master 。 如果其他方法不起作用,并且你想要摆脱一些奇怪的参考,这种原始的方式是绝对的。 它给你准确的删除(或创build!)任何types的参考。

只是略有相关,但仍然可能有助于我们的相同情况 – 我们使用远程存储库的networking文件共享。 上个星期的事情正在进行,本周我们得到了错误:“远程起源没有通告分支refs / heads / master Ref。这个Ref可能不存在于远程或可能被权限设置隐藏”

但是,我们相信没有做任何事情来腐化事情。 NFS做了快照,所以我查看了每个“以前的版本”,发现三天前,版本库的大小已经从282MB增加到了33MB,现在已经有大约1,403个新文件和300个文件夹了。 我询问了我的同事,当天有人试图推行 – 然后取消了。

我使用“还原”function将其恢复到该date之前,现在所有东西再次正常工作。 我曾尝试过修剪,似乎没有帮助。 也许更严厉的清理工作会起作用。

希望这可能会帮助别人有一天!

松鸦