这是服务器上的远程 Git 存储库
[aaa@web48 proj.git]$ git ls-remote .
dfca707432eb53678b37026b160a4bdc7f1ac6c3 HEAD
dfca707432eb53678b37026b160a4bdc7f1ac6c3 refs/heads/master
1e09c37443ee758644a712e3c1a8b08b18a1f50d refs/heads/placeholder
我想删除 HEAD/master 分支。我怎样才能做到这一点,无论是在服务器上还是远程?我正在使用 Tower 客户端。
远程裸存储库上的
HEAD
符号引用代表该存储库的默认分支。该存储库的任何非裸克隆都会在克隆后自动检出该分支。
因为它是默认的,你不能像通常那样删除它,Git 不会让你:
$ git push origin --delete master
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:/Users/Keoki/Documents/GitHub/bare
! [remote rejected] master (deletion of the current branch prohibited)
error: failed to push some refs to 'c:/Users/Keoki/Documents/GitHub/bare'
上面的错误消息指出,您无论如何都可以绕过安全检查来删除远程中当前的
HEAD
分支,但我将向您展示如何更改默认分支,以便您仍然可以保留默认分支,但可以像您想要的那样删除
master
。从命令行更改默认 HEAD 分支
因此,如果您有权访问遥控器,请使用以下命令更改符号引用HEAD
指向的分支:
git symbolic-ref HEAD refs/heads/<newDefaultBranch>
更改 GitHub 或 Bitbucket 上的默认 HEAD 分支
正如我在上一节中已经提到的,如果您使用 GitHub 或 Bitbucket 等托管服务,则可以通过 Web 界面更新远程存储库中的默认
HEAD
GitHub
转到存储库的“设置”选项卡,您将在顶部看到默认分支设置,
比特桶
进入存储库的“设置”选项卡,您将在中间附近看到默认分支设置,
更新本地克隆对远程默认分支的引用
更新远程裸存储库中的默认分支后,您需要更新该存储库的本地克隆认为远程中默认
HEAD
git remote set-head <remote> --auto
# Or shorter
git remote set-head <remote> -a
您可以使用确认本地存储库已正确更新
$ git branch -r
origin/HEAD -> origin/foo
origin/foo
origin/master
现在您可以删除远程上的 master 分支了
现在您已将远程上的默认
HEAD
$ git push origin --delete master
To c:/Users/Keoki/Documents/GitHub/bare
- [deleted] master
# Older syntax
$ git push origin :master
其他参考资料和文档 更改 Git 远程 HEAD 以指向除 master 之外的其他内容
HEAD
symbolic-ref -d
:不允许移除 HEAD
Junio C Hamano (
gitster
. 提交 12cfa79(2016 年 9 月 2 日)。
(由Junio C Hamano --
gitster
,2016 年 9 月 12 日)“
git symbolic-ref -d HEAD
”愉快地删除了符号引用,但生成的存储库变成了无效的存储库。教导禁止移除 HEAD 的命令。
如果从存储库中删除符号引用HEAD
,Git 将不再 认为存储库有效,甚至“git symbolic-ref HEAD refs/heads/master
”也无法从该状态恢复
(虽然“git init
”可以,但这是一个明确的迹象,表明您正在谈论一个“损坏的”存储库)。
本着类似于afe5d3d(“符号引用:拒绝 HEAD 中的非引用目标”,2009-01-29)的精神,禁止删除HEAD