警告:忽略损坏的ref refs / remotes / origin / HEAD


77

从几天前开始,每次我tab按键以bash形式完成分支名称时,都会看到以下消息:

警告:忽略损坏的ref refs / remotes / origin / HEAD警告:忽略损坏的ref refs / remotes / origin / HEAD

例如,这是当我有一个名为feature / foo的分支并按时看到的tab

git checkout f

$ git checkout fwarning: ignoring broken ref refs/remotes/origin/HEAD
warning: ignoring broken ref refs/remotes/origin/HEAD
eature/


您是否有一个名为“ origin / HEAD”的分支?git fetch,然后尝试git branch -r。可能您需要进行一些清理。如果是这种情况,我可以发布一些清理功能...(例如git fetch -p删除远程已删除的本地引用)。
code_fodder

Answers:


106

最近,当我的团队中有人从远程删除了我们的旧开发分支时,我遇到了这个问题。我运行以下命令来检查HEAD的状态:

$ git symbolic-ref refs/remotes/origin/HEAD
refs/remotes/origin/old_dev

此命令输出旧的开发分支的名称,该名称不再存在。

我使用以下方法修复了警告:

$ git symbolic-ref refs/remotes/origin/HEAD refs/remotes/origin/new_dev

(其中“ new_dev”是分支名称。将其替换为您要HEAD指向的分支的名称。)


2
谢谢!master在我的仓库中删除分支时,我遇到了同样的问题。
Apoorv Khatreja

68

这是一个比symbolic-ref更简单的解决方案。


由于您可能已经排除了最初指向origin / HEAD的分支。

1.列出您的远程分支机构:

git branch -r

2.如果结果中未显示:

origin/HEAD -> origin/(something)

3.只需再次指出:

git remote set-head origin master

其中“ master”是您的主要(头)分支的名称。


git branch -r现在显示再次运行origin/HEAD -> origin/(something),警告消失。


7
这个答案对我来说是最容易理解和消化的方法,并且很有魅力。谢谢。
Lokua

关于HEAD要指出的内容是否有经验法则?换句话说,什么时候HEAD不指向master
tim.rohrer,

@ tim.rohrer,经验法则是选择您最重要的分支HEAD。克隆时,您,您的团队和协作者必须首先看到该分支,并且很可能是新产品发布的分支。
Paulo Coghi,

嗯好吧 对于开发人员来说,最重要的分支似乎是,develop但是生产版本可能来自master。我可以做更多研究,但不确定我为什么知道HEAD
tim.rohrer,

克隆存储库时,新的克隆将指向HEAD
Paulo Coghi,

9

只需运行命令-

git remote set-head origin master

请享用!


4
请记住,您的HEAD可能不会被调用master。您必须使用最重要的分支。例如mastermainrc无论分支你期望开发人员上。
马特

2

就我而言,问题在于文件.git\refs\remotes\origin\master已损坏,也许是因为几天前我的计算机非自愿断开了电源。

我通过用正确的引用替换文件内容来解决它,该引用是文件中可以找到的40个字符的十六进制数字.git\FETCH_HEAD


1

看起来您的遥控器的默认分支origin不再存在。
修复遥控器的默认分支:


1
我认为这行不通。如果要首先删除该远程分支,则需要更改主分支或默认分支,但是更改此方法不能解决损坏的引用。
alondono '18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.