如何删除裸'git'存储库中唯一的分支?

如何删除裸'git'存储库中唯一的分支?,git,Git,我正在试验一些githooks,因此我设置了一个本地裸存储库,其中包含一个从hooks到存储在别处的hooks的符号链接 我已将master分支推送到gitrepo,当然,挂钩失败了。:) 我想将gitrepo重置为零,而不需要删除它和重新创建符号链接等 由于主分支是存储库中唯一的分支,如何删除它? $ git branch -d master error: Cannot delete the branch 'master' which you are currently on. 要删除mas

我正在试验一些
githooks
,因此我设置了一个本地裸存储库,其中包含一个从
hooks
到存储在别处的hooks的符号链接

我已将
master
分支推送到
git
repo,当然,挂钩失败了。:)

我想将
git
repo重置为零,而不需要删除它和重新创建符号链接等

由于主分支是存储库中唯一的分支,如何删除它?

$ git branch -d master
error: Cannot delete the branch 'master' which you are currently on.

要删除
master
ref,请使用
git update ref-d refs/heads/master

为什么您不应该
rm/refs/heads/master
packed ref
可能存在,因此
rm
有时无法按预期工作


顺便说一句,如果你可以创建一个新的空回购,那么重置有什么意义呢?只需使用
git init--bare repo.git

通常,您不需要删除分支,您可以使用
git reset--hard REV
将其设置为所需的新版本。但是,如果我正确理解了yuo,那么您希望将其重置为“nothing”,即在第一次调用
git init
之后的状态。git似乎不允许您这样做,但您可以通过简单地删除
.git/heads/refs/master
获得类似的效果。以下是新创建的回购协议的演示:

[~/x]$ git init
Initialized empty Git repository in /home/author/x/.git/
[~/x]$ touch a      
[~/x]$ git add a
[~/x]$ git commit -m foo
[master (root-commit) 5fcc99c] foo
 0 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 a
[~/x]$ git log
commit 5fcc99cc396cf5bc2c2fa9edef475b0cc9311ede
Author: ...
Date:   Mon Sep 3 12:40:15 2012 +0200

    foo
在这里,您希望这样做,但git不允许这样做:

[~/x]$ git reset --hard HEAD^
fatal: ambiguous argument 'HEAD^': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions
但是,您可以这样做:

[~/x]$ rm .git/refs/heads/master 
通过提交一些东西来检查它是否有效

[~/x]$ touch b
[~/x]$ git add b
[~/x]$ git commit -m 'new history'
[master (root-commit) 0e692b9] new history
 0 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 a
 create mode 100644 b
[~/x]$ git log
commit 0e692b9bb77f526642dcdf86889ec15dfda12be0
Author: ...
Date:   Mon Sep 3 12:40:52 2012 +0200

    new history
[~/x]$ git branch 
* master

删除ref对我很有用。当然,这不会删除提交,但它有相同的用途,如果需要,提交将由
git gc
删除。
rm
是一个肮脏的解决方案,请参见我的答案。
rm refs/heads/master
git update ref-d refs/heads/master
短;为什么我要使用第二个呢?@AlexChamberlain,因为也可能存在
packed ref
,所以
rm
有时不能按预期工作。是的,谢谢关于
refs/heads/
prefix,我已经忘记了它。
git init--bare repo.git
不会删除当前存在的分支。@AlexChamberlain我的意思是,你可以删除它并创建一个新的原始分支,而不是删除现有repo中的所有内容。因为我已经为hooks目录设置了一个符号链接。