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

$ 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.

此外,gitremote的输出很奇怪,因为它没有列出public:

$ git remote show 
origin

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

更新,尝试了gitpush命令:

$ 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 

rm公司删除名为<name>的远程。所有远程跟踪分支和远程的配置设置被移除。

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

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


建议上下文

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

我怀疑OP做了一些事情,使他们的树处于不一致的状态,导致其行为有点奇怪,需要git-gc来修复遗留的cruft。

通常,gitbranch-rd-origin/badbranch足以攻击本地跟踪分支,或者gitpushorigin:badbranch用于攻击远程分支,通常您永远不需要调用gitgc


git push public :master

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

要列出远程跟踪分支,请执行以下操作:

git branch -r

要删除远程跟踪分支,请执行以下操作:

git branch -rd public/master

gitgc--prune=now不是您想要的。

git remote prune public

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

是你想要的


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

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

你需要做的就是

$ git branch -rd origin/whatever 

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


你需要做的就是

git fetch -p

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

如果您使用的是git1.8.5+,则可以自动设置

git config fetch.prune true

or

git config --global fetch.prune true

我也有类似的问题。这些答案都没有帮助。在我的案例中,有两个已删除的远程存储库永久显示。

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

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

find .git -name Repo 

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

然后我做了:

grep Repo -r .git

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

通常,你应该把这份工作交给吉特。


git push origin --delete <branch name>

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


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

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


我不知道git branch-rd,所以我自己解决此类问题的方法是将我的回购视为远程回购并进行远程删除。git push.:refs/remotes/public/master。如果其他方法不起作用,并且你想删除一些奇怪的引用,那么这种生涩的方法一定会奏效。它使您能够精确地删除(或创建!)任何类型的引用。


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

但我们认为没有采取任何措施来腐败。NFS做快照,所以我查看了每个“以前的版本”,发现三天前,存储库的MB大小已从282MB变为33MB,现在有大约1403个新文件和300个文件夹。我询问了我的同事,其中一人当天试图推送,然后取消了推送。

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

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

Jay


不确定我是如何陷入混乱的,但我的错误消息略有不同:

>git远程>git分支警告:忽略中断的ref refs/remotes/origin/HEAD*主>

但我能够通过稍微重新解释本页其他地方的修复程序来修复它。我的意思是我用关键字HEAD替换了<remote>/<branch>中的分支名称。人们提到的其他建议都没有奏效(gc、prune等),所以我已经没有什么想法了,希望得到最好的结果。总之,它就像一个魅力:

>gitremote>gitbranch-rd-origin/HEAD删除了远程跟踪分支原点/HEAD(为refs/remotes/origin/main)。>git分支*main>


我在这里尝试了一切,但都没有成功。如果所有其他操作都失败,请从文本文件“.git/packed refs”中删除有问题的分支,然后从“.git\refs\remotes\origin<branchName>”中删除问题的分支