无法删除远程主分支

时间:2014-03-27 22:54:30

标签: 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/survey-content c3356d9 Runtime textures for survey

当我执行前面提到的git push时,我收到以下错误:

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'

这是我推送的裸存储库,所以不应该有#34;当前分支"。为什么我无法远程删除主分支?它应该与任何其他分支没有什么不同,特别是因为我之前已经摆脱了origin/HEAD

2 个答案:

答案 0 :(得分:0)

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

(如果删除文件HEAD,git不再将存储库视为存储库。所以总是HEADref: refs/heads/branch分支名称contains是当前的分支,即使它是一个简单的回购。)

正如错误消息所示,要允许删除,您可以设置git config变量。我不确定如果你删除那个分支会发生什么(见脚注)。


1 在一个裸仓库中拆分HEAD可能会允许删除,但从它做git clone时会引起一些奇怪。 git协议中存在一种错误:当你连接到遥控器并询问它的引用时,它不会向你展示任何间接引用作为间接引用。由于HEAD几乎总是指向分支的间接引用,因此你正在进行克隆的系统上的git - 换句话说 - 你的本地git - 有一个hack:它要求远程git获取所有引用及其SHA-1的列表,然后查看哪个分支与HEAD具有相同的SHA-1。然后它假定必须是遥控器在" on"上的分支,并且它是git clone签出的默认分支。除非有SHA-1的分支零或两个或更多分支,否则哪个很好用。

答案 1 :(得分:0)

这是因为当您浏览该存储库时,github正在查看分支以提供Web内容。所以我们首先要让github查看我们的占位符分支,然后删除master。

首先推高占位符分支:

  • git checkout 占位符 #如果没有占位符
  • git push origin 占位符 然后将占位符设置为github默认分支。转到forked存储库的主github页面,然后单击“Admin”按钮。

屏幕顶部附近有一个“默认分支”下拉列表。从那里,选择占位符。在我正在查看的界面上,下拉列表上方会出现一个绿色勾号。现在你可以(从命令行):

  • git push origin:master

和 - 没有主分支...