8

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

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

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

4

2 回答 2

17

如果远程分支当前是默认的 HEAD 分支,则不能删除它

远程裸仓库上的HEAD符号引用代表该仓库的默认分支。该 repo 的任何非裸克隆将在克隆后自动检出该分支。

因为它是默认的,你不能像往常一样删除它,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 分支

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

GitHub

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

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

现在您可以删除远程上的主分支

现在您已将远程上的默认HEAD分支更改为主分支以外的其他内容,您将能够在远程上将其删除,

$ git push origin --delete master

To c:/Users/Keoki/Documents/GitHub/bare
 - [deleted]         master

# Older syntax
$ git push origin :master

其他参考资料和文档

于 2014-07-13T17:25:11.307 回答
2

注意:虽然您确实无法删除默认的 HEAD 分支,但您可以,直到 Git 2.11(2016 年第四季度)删除HEAD自己!

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

请参阅Junio C Hamano ( ) 的提交 12cfa79(2016 年 9 月 2 日(由Junio C Hamano 合并 -- --d1de693 提交中,2016 年 9 月 12 日)gitster
gitster

" git symbolic-ref -d HEAD" 愉快地删除了符号 ref,但生成的存储库变成了无效的。
教命令禁止移除 HEAD。

如果您HEAD从存储库中删除符号引用,Git 不再认为该存储库有效,甚至“ git symbolic-ref HEAD refs/heads/master”也无法从该状态恢复
(尽管“ git init”可以,但这是您正在谈论的一个确定信号“损坏的”存储库)。

本着类似于afe5d3d ("symbolic ref: reject non-ref targets in HEAD", 2009-01-29)的精神,禁止删除HEAD以避免损坏存储库。

于 2016-09-16T07:22:40.617 回答