繁体   English   中英

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

[英]How to delete HEAD branch on remote Git repository?

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

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

我想删除HEAD / master分支。 我怎么能在服务器上或远程执行此操作? 我正在使用Tower客户端。

如果远程分支当前是默认的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分支

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

GitHub上

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

GitHub设置

到位桶

进入你的repo的设置选项卡,你会看到中间附近的默认分支设置,

Bitbucket设置

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

一旦更新了远程裸仓库中的默认分支,您将需要更新该仓库的本地克隆认为远程中的默认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

其他参考文献和文​​档

注意:虽然您无法删除默认的HEAD分支,但是在Git 2.11(2016年第4季度)删除HEAD本身之前!

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

Junio C gitstergitster 提交的12cfa79 (2016年9月2日
(由Junio C gitster合并- gitster -提交d1de693 ,2016年9月12日)

git symbolic-ref -d HEAD ”很高兴地删除了符号引用,但生成的存储库变为无效的存储库。
教导命令禁止移除HEAD。

如果从存储库中删除symbolic-ref HEAD ,Git不再认为存储库有效,甚至“ git symbolic-ref HEAD refs/heads/master ”也无法从该状态恢复
(虽然“ git init ”可以,但这肯定表明你正在谈论一个“破碎的”存储库)。

在类似于afe5d3d(“符号ref:拒绝HEAD中的非ref目标”,2009-01-29)的精神中,禁止删除HEAD以避免破坏存储库。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM