Git 无法删除远程主分支

Git 无法删除远程主分支,git,Git,我正在尝试删除远程主分支: git push origin :master 我的分行名单: $ git branch -avv * survey-content c3356d9 [origin/survey-content] Runtime textures for survey remotes/origin/master 4300c27 New Survey layout for message header remotes/origin

我正在尝试删除远程主分支:

git push origin :master
我的分行名单:

$ git branch -avv
* survey-content                c3356d9 [origin/survey-content] Runtime textures for survey
  remotes/origin/master         4300c27 New Survey layout for message header
  remotes/origin/survey-content c3356d9 Runtime textures for survey
当我执行前面提到的git推送时,会出现以下错误:

remote: error: By default, deleting the current branch is denied, because the next
remote: error: 'git clone' won't result in any file checked out, causing confusion.
remote: error:
remote: error: You can set 'receive.denyDeleteCurrent' configuration variable to
remote: error: 'warn' or 'ignore' in the remote repository to allow deleting the
remote: error: current branch, with or without a warning message.
remote: error:
remote: error: To squelch this message, you can set it to 'refuse'.
remote: error: refusing to delete the current branch: refs/heads/master
To c:/Dropbox/Repositories/repo.git
 ! [remote rejected] master (deletion of the current branch prohibited)
error: failed to push some refs to 'c:/Dropbox/Repositories/repo.git'
这是一个我正在推进的空存储库,所以不应该有当前分支。为什么我不能远程删除主分支?它应该与任何其他分支没有区别,特别是因为我以前已经去掉了origin/HEAD。

所有git存储库都有一个当前分支,除非它们有一个分离的HEAD。1

如果删除文件头,git将不再将存储库视为存储库。所以总是有一个HEAD,它包含的任何ref:refs/heads/branch分支名称都是当前分支,即使它是裸回购

正如错误消息所说,要允许删除,可以设置git config变量。我不确定如果你删除了那个分支会发生什么,尽管请看脚注


1在裸回购协议中删除头部可能会允许删除,但在从中进行git克隆时会造成一些奇怪。git协议中有一种缺陷:当您连接到远程设备并询问它的引用时,它不能将任何间接引用显示为间接引用。由于HEAD几乎总是一个指向分支的间接引用,所以在你克隆本地git的系统上,git有一个漏洞:它要求远程git提供所有引用及其SHA-1的列表,然后查看哪个分支与HEAD具有相同的SHA-1。然后,它假定必须是远程服务器所在的分支,这是git克隆要签出的默认分支。除非SHA-1中没有分支,或者有两个或更多分支,否则这非常有效。…

这是因为github正在查看主分支,以便在您浏览存储库时提供web内容。因此,我们首先必须让github查看占位符分支,然后删除master

首先向上推占位符分支:

git push origin :master
git签出占位符(如果尚未在占位符上) git推送原点占位符 然后将占位符设置为github的默认分支。转到分叉存储库的github主页,然后单击“Admin”按钮。 屏幕顶部附近有一个“默认分支”下拉列表。从那里,选择占位符。在我看到的界面上,下拉列表上方会出现一个绿色的勾号。现在,您可以从命令行执行以下操作:

git推送源:master
而且-没有主分支…

i默认情况下,任何存储库都应该启用该变量,不设置该变量与其说是有益的,不如说是恼人的。不过,谢谢你的解释,对于我这样的新手来说,它的行为如此奇怪似乎不太直观。git中有很多奇怪之处…:-