如何删除远程 Git 存储库上的 HEAD 分支?

问题描述 投票:0回答:2

这是服务器上的远程 Git 存储库

[aaa@web48 proj.git]$ git ls-remote .
dfca707432eb53678b37026b160a4bdc7f1ac6c3    HEAD
dfca707432eb53678b37026b160a4bdc7f1ac6c3    refs/heads/master
1e09c37443ee758644a712e3c1a8b08b18a1f50d    refs/heads/placeholder

我想删除 HEAD/master 分支。我怎样才能做到这一点,无论是在服务器上还是远程?我正在使用 Tower 客户端。

git git-tower
2个回答
17
投票

如果远程分支当前是默认 HEAD 分支,则无法删除它

远程裸存储库上的

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 分支

如果您有权访问远程,您可以更改远程存储库中的默认分支。如果您使用 GitHub 或 Bitbucket 等托管提供商,他们应该允许您通过其 Web 界面更改默认分支。

因此,如果您有权访问遥控器,请使用以下命令更改符号引用HEAD指向的分支:

git symbolic-ref HEAD refs/heads/<newDefaultBranch>


更改 GitHub 或 Bitbucket 上的默认 HEAD 分支

正如我在上一节中已经提到的,如果您使用 GitHub 或 Bitbucket 等托管服务,则可以通过 Web 界面更新远程存储库中的默认 
HEAD

分支。

GitHub


转到存储库的“设置”选项卡,您将在顶部看到默认分支设置,

比特桶

GitHub settings进入存储库的“设置”选项卡,您将在中间附近看到默认分支设置,

更新本地克隆对远程默认分支的引用

Bitbucket settings更新远程裸存储库中的默认分支后,您需要更新该存储库的本地克隆认为远程中默认

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

分支更改为 master 分支以外的其他分支,您将能够在远程上删除它,

$ git push origin --delete master To c:/Users/Keoki/Documents/GitHub/bare - [deleted] master # Older syntax $ git push origin :master


其他参考资料和文档

更改 Git 远程 HEAD 以指向除 master 之外的其他内容
  • 官方 Linux 内核 git-symbolic-ref(1) 手册页
  • 官方 Linux 内核 git-remote(1) 手册页
  • 官方 Linux 内核 git-push(1) 手册页
  • 注意:虽然您确实无法删除默认的 HEAD 分支,但在 Git 2.11(2016 年第 4 季度)之前您可以删除
HEAD

2
投票

symbolic-ref -d
:不允许移除 HEAD

请参阅
Junio C Hamano (
gitster

)

. 提交 12cfa79(2016 年 9 月 2 日)。

(由 
Junio C Hamano -- gitster
-- 合并于 commit d1de693
,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

以避免损坏存储库。

	

© www.soinside.com 2019 - 2024. All rights reserved.