git branch -d <分支名> 报错:找不到分支 <分支名>。

30

当我输入git branch时,我会得到如下结果:

* master
localbranch

但是当我尝试删除分支 git branch -d localbranch 时,出现了未找到错误:

error: branch 'localbranch' not found.

我也尝试使用git branch -D localbranch强制删除,但它给了我相同的错误。

该分支已损坏,我进行了以下操作,Git存储库损坏(头文件检查不正确;松散对象损坏),以删除损坏的文件。但现在我无法删除该分支。

3个回答

23

分支以包含它们指向的SHA值的文件形式存储。尝试从项目中的.git/refs/head/目录中删除该分支的文件,名称为localbranch

rm .git/refs/heads/localbranch

1
请注意,如果远程服务器上也存在此分支(尽管分支名称并不表明如此),您可以使用 git push origin :branchname 来完成此操作。 - Anshul Goyal
只有在分支引用被解压缩时,该文件才会存在,最好使用显式引用 refs/heads/localbranch 的git命令,而不使用 .git 目录。 - Andrew C
@AndrewC 由于这是一个本地分支,我们可以假设它已经被解压了吗?此外,OP明确提到git branch -d localbranch对他没有起作用,所以我很好奇在这里哪个本地命令会起作用...你是不是想尝试一下git branch -d refs/heads/localbranch - Anshul Goyal
创建一个名为 localname 的分支,使用命令 git branch localname。通过命令 ll .git/refs/heads/localname 验证它是否创建成功。运行 git gc 命令,然后再次尝试 ll 命令。 - Andrew C
5
我建议使用 git update-ref 命令,并且只有在万不得已时才在 .git 目录中操作,需要注意的是分支可能存储在 .git/packed-refs 文件中。 - Andrew C
显示剩余2条评论

13
在某些情况下,分支包含无法在终端窗口中显示的字符,因此我需要直接访问存储库。
我的 Git for Windows 处于这种状态:
$ git branch -l
  master
* next
  my-topic-branch

移除失败

$ git branch -D my-topic-branch
error: branch 'my-topic-branch' not found.

显示 heads 目录的内容,显示分支名称更加复杂...

$ ls -al .git/refs/heads
total 7
drwxr-xr-x 1 112802 197121  0 Oct 11 13:06 ./
drwxr-xr-x 1 112802 197121  0 Jul 11 14:30 ../
-rw-r--r-- 1 112802 197121 41 Oct  4 12:39 ''$'\302\222''my-topic-branch'
-rw-r--r-- 1 112802 197121 41 Sep 15 15:23 master
-rw-r--r-- 1 112802 197121 41 Oct 11 13:05 next
drwxr-xr-x 1 112802 197121  0 Jul 12 13:28 origin/

我可以成功地删除全名

$ git branch -D ''$'\302\222''my-topic-branch'
Deleted branch my-topic-branch (was efbc2fa).

1

它不仅帮助我从 .git/refs/head/ 中删除分支,还可以从 .git\refs\remotes 中删除。只需仔细检查.git文件夹中的所有引用即可。然后,我使用 git branch --unset-upstream 来修复git的内存问题(因为我正在删除作为上游的分支)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接