795

在我当前的仓库中,我有以下输出:

$ 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

如何从分支列表中删除“remotes/public/master”?

更新,尝试了git push命令:

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

13 回答 13

793

您可能需要清理:

git gc --prune=now

或者你可能需要修剪:

git remote prune public

修剪

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

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

但是,似乎这些应该早点清理

git remote rm public 

R M

删除名为 <name> 的遥控器。删除所有远程跟踪分支和远程配置设置。

因此,可能是您手动编辑了配置文件而没有发生这种情况,或者您有权限问题。

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


建议上下文

如果您查看修订日志,您会注意到我建议了更多“正确”的技术,无论出于何种原因,这些技术都不想在他们的存储库上工作。

我怀疑 OP 做了一些事情,导致他们的树处于不一致的状态,导致它的行为有点奇怪,并且git gc需要修复留下的残留物。

通常 git branch -rd origin/badbranch足以 nuking 本地跟踪分支或git push origin :badbranchnuking 远程分支,通常永远不需要调用git gc

于 2009-07-02T02:42:05.450 回答
736

你需要做的就是

git fetch -p

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

如果您使用的是 git 1.8.5+,则可以自动设置

git config fetch.prune true

或者

git config --global fetch.prune true
于 2011-11-24T10:38:43.817 回答
334
git push public :master

这将删除名为masterKent Fredric 指出的远程分支。

列出远程跟踪分支:

git branch -r

要删除远程跟踪分支:

git branch -rd public/master
于 2009-07-02T02:47:21.790 回答
173

你需要做的就是

$ git branch -rd origin/whatever 

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

于 2011-07-07T20:59:19.027 回答
73

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

git remote prune public

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

是你想要的

于 2010-06-08T18:18:35.240 回答
32

当参考被打包时,接受的答案对我不起作用。然而,这确实:

$ git remote add public http://anything.com/bogus.git
$ git remote rm public
于 2011-01-12T04:21:17.477 回答
8

就我而言,我试图删除保存在.git/packed-refs. 您可以编辑此纯文本文件并从中删除git br -D不知道如何触摸的条目(至少在 1.7.9.5 版中)。

我在这里找到了这个解决方案:https ://stackoverflow.com/a/11050880/1695680

于 2014-12-01T23:47:29.300 回答
5
git push origin --delete <branch name>

引用自:http ://www.gitguys.com/topics/adding-and-removing-remote-branches/

于 2014-10-02T18:28:26.740 回答
3

我不知道git branch -rd,所以我为自己解决此类问题的方法是将我的仓库视为远程仓库并进行远程删除。git push . :refs/remotes/public/master. 如果其他方法不起作用并且您想摆脱一些奇怪的参考,那么这种原始方法是肯定的。它为您提供删除(或创建!)任何类型参考的精确精度。

于 2015-05-08T23:14:17.183 回答
2

我有一个类似的问题。没有一个答案有帮助。就我而言,我有两个已删除的远程存储库永久显示。

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

假设存储库称为“Repo”。我做了:

find .git -name Repo 

所以,我从 .git 文件夹中删除了相应的文件和目录(这个文件夹可以在你的 Rails 应用程序或计算机上找到 https://stackoverflow.com/a/19538763/6638513)。

然后我做了:

grep Repo -r .git

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

通常,你应该把这份工作留给 git。

于 2014-02-26T10:20:45.963 回答
2

只是稍微相关,但在与我们相同的情况下仍然可能会有所帮助 - 我们为远程存储库使用网络文件共享。上周一切正常,本周我们收到错误消息“远程源没有为分支 refs/heads/master 发布 Ref。此 Ref 可能不存在于远程中,或者可能被权限设置隐藏”

但我们相信没有采取任何措施来破坏事物。NFS 会做快照,所以我查看了每个“以前的版本”,发现三天前,存储库的大小(以 MB 为单位)从 282MB 变为 33MB,现在大约有 1,403 个新文件和 300 个文件夹。我询问了我的同事,其中一位试图在那天进行推送 - 然后取消了它。

我使用 NFS“恢复”功能将其恢复到该日期之前,现在一切正常。我之前确实尝试过修剪,似乎没有帮助。也许更严厉的清理工作会奏效。

希望有一天这可能对其他人有所帮助!

周杰伦

于 2017-01-13T18:37:01.330 回答
0

不知道我是如何陷入困境的,但我的错误信息略有不同:

> git 远程
> git 分支
  警告:忽略损坏的 ref refs/remotes/origin/HEAD 
  * main 
>

但是我能够通过稍微重新解释此页面上其他地方的修复来修复它。我的意思是我用关键字替换HEAD<remote>/<branch>. 人们提到的其他建议都没有奏效(gc,prune等),所以我的想法已经用完了,希望最好。无论如何,它就像一个魅力:

> git remote 
> git branch -rd origin/HEAD 已删除远程跟踪分支 origin/HEAD(原为 refs/remotes/origin/main)。

> git 分支
* 主
>
于 2021-09-03T07:59:36.570 回答
0

我在这里尝试了一切,但没有任何效果。如果一切都失败了,从文本文件 '.git/packed-refs' 中删除有问题的分支,然后从 '.git\refs\remotes\origin<branchName>' 中删除有问题的分支

于 2021-11-03T12:32:30.413 回答