在git中删除破损的分支

问题描述:

我已经用“git checkout -b mybranch”创建了分支。似乎出现了一些问题,现在我无法使用“git branch -D mybranch”将其删除。它说:错误:分支'mybranch'找不到。在git中删除破损的分支

+0

这是一个愚蠢的问题:你怎么知道它还没有被删除,仍然存在? – bdares

+1

你可以在'git branch'中看到你的分支,或者在'.git/packed-refs'或'.git/refs/heads'中看到你的分支吗? – Rup

+2

是的,我看到我的分支在git分支 –

如果git branch -D确实无法正常工作,那么您唯一的选择是对其进行旁路并自己编辑git check-out的状态。你应该去你退房(其中.git目录)和

  1. 编辑.git/packed-refs的根目录下;如果您看到有分行名称的行,请将其删除
  2. 请在.git/refs/heads中查看以分行名称命名的文件;如果你看到一个,删除它

你显然不需要删除一个不存在的分支。使用git branch可查看分支机构列表,如果分支机构不在该分支机构中,则不存在分支机构,并且您不需要删除分支机构。否则,请确保正确输入名称,git branch -D应该可以正常工作。

尽管如此,你不需要关心很多可能仍然存在但是无法访问的分支。 Git中的分支实际上只是简单的40个字节的文件,所以不需要担心。

+1

也可以尝试'git branch -a'确保你没有意外地将分支推送到远程仓库。如果你有,你可以阅读说明如何删除该分支[这里](http://gitready.com/beginner/2009/02/02/push-and-delete-branches.html) – Shahbaz

+0

除非你当然可以因为一个破损/被删除的分支仍然处于打包状态,所以不会推送。 – steviesama

+0

在后面看到一个破旧的分支参考文件堵塞了git客户端,这仍然是一种痛苦。没人愿意。很显然,这个家伙正试图删除一个使用git分支的“出现”存在的分支。 –

我用git update-ref -d refs/heads/<branch name>来解决这个问题。据推测,这与Rup在所选答案中提出的建议相同,只是通过Git的CLI接口。

我有同样的问题。无论何时执行git branch命令,分支都在分支列表中,但我无法删除它。

在我的案例中的解决方案很简单,有点意外:我检查了破损的分支git checkout broken_branch(是的,它的工作),然后我检查出主人和...再次执行git branch -D broken_branch

如果分支名称中包含它需要被引用的特殊字符:

$ git branch -D 'ENH-Adding-unit-``julian``-to-``to_datetime``' 
+0

感谢您的建议。我的分支被称为'sandpit-ş-blockquotes' - 我试着按照你的建议引用它,但它仍然无效:-( '$ git branch -D'sandpit-ş-blockquotes''。 你还有什么想法/建议? – samjewell

+0

@samjewell也许unicode符号不能被控制台解释吗? – Winand

+1

@samjewell我能够在SourceTree中创建和删除分支https://pp.vk.me/c636719/v636719561/19786/ Q5DRz-b39VE.jpg – Winand

我有同样的问题git branch -d <branch_name>不工作,我并没有发现任何在.git/packed-refs.git/refs/heads但我

了文件

.git/refs/remotes/origin

带有我无法在本地以及远程删除的分支的名称。 但删除后,我想删除它不显示在本地的branch_name文件。

要删除它远程使用

git fetch -p origin

的-p选项--prune告诉读取前,删除任何远程跟踪引用该遥控器上不再存在。 然后使用命令

git push origin :<branch_name_you_was_unable_to_delete>

在远程删除。

你就完成了。:)