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

时间:2012-09-03 10:26:03

标签: git

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

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

我想将git repo重置为空,不删除它并且必须重新创建符号链接等。

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

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

2 个答案:

答案 0 :(得分:14)

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

你为什么不rm /refs/heads/master

packed-refs可能存在,因此rm有时无法正常工作。

顺便说一句,如果您可以创建一个新的空仓库,重置的重点是什么?只需使用git init --bare repo.git

答案 1 :(得分:1)

通常,您不需要删除分支,您可以使用git reset --hard REV将其设置为所需的新版本。但是,如果我正确理解了你,你想要将它重置为“无”,即重置为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