当本地git分支无法查找'refs/heads'中的提交对象时,我该如何删除该分支?

10
最近每次我尝试进行git pull时都会出现如下错误信息:
error: refs/heads/TestBranch123不指向有效的对象!
这些是旧分支,我不关心它们,所以我想删除它们,以免再次看到错误消息。但是,当我尝试删除分支时,由于类似的错误,我无法完成操作。
git branch -D TestBranch123
error: Couldn't look up commit object for 'refs/heads/TestBranch123'

1
在 Git 2.34 (2021 年第四季度) 中,git branch -D TestBranch123 将会真正起作用!请参见下面的答案 - VonC
2个回答

14

对我来说,那些错误信息听起来很令人担忧。你的存储库可能已经损坏了。Git不应该垃圾回收分支正在指向的提交。正如torek建议的那样,您可以尝试git fsck来验证您的存储库。

但是,您可以从git存储库中删除代表该分支的文件:

rm .git/refs/heads/TestBranch123

你还应该清除任何对该分支的引用,包括在git配置文件中的引用。


2
我建议运行 git fsck(也许还要加上 --strict,不过那没那么重要)。此外,如果“坏”的分支引用已经被打包,您可能需要编辑 .git/packed-refs - torek

1

8年后,您将不再收到该错误消息。

添加--force就足够了:

git branch -d --force TestBranch123
# or
git branch -D TestBranch123

"git branch -D"(man) 命令用于删除指向缺失提交的破损分支引用,该问题已在Git 2.34(2021年第4季度)中得到修复。

请查看 提交 597a977(2021年8月27日),作者为René Scharfe (rscharfe)
(由Junio C Hamano -- gitster --提交 ec8d24f中合并,2021年9月8日)

分支:允许使用 --force 删除悬空的分支

报告者:Ulrich Windl
协助者:Ævar Arnfjörð Bjarmason
协助者:Junio C Hamano
签署者:René Scharfe

git branch(手册)仅允许删除指向有效提交的分支。
如果给出--force,则跳过该检查,因为调用者使用它表示他们知道自己在做什么并接受后果。
这允许删除悬空的分支, 以前必须使用--force先将其重置为有效的起始点。

git branch现在在其手册页中包括:

无论其合并状态如何,或者它是否指向有效提交,都可以创建分支。


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