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

Posted

技术标签:

【中文标题】警告:忽略损坏的 ref refs/remotes/origin/HEAD【英文标题】:warning: ignoring broken ref refs/remotes/origin/HEAD 【发布时间】:2018-01-30 09:44:20 【问题描述】:

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

例如,当我有一个名为 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/

【问题讨论】:

这些可以帮助***.com/questions/34990734/…(或)***.com/questions/28894135/… 你有一个叫“origin/HEAD”的分支吗?试试git fetch然后git branch -r。也许你需要做一些清理工作。如果是这种情况,我可以发布一些清理功能...(例如 git fetch -p 删除已在远程删除的本地引用)。 【参考方案1】:

我最近遇到了这种情况,当时我的团队中有人从远程删除了我们的旧开发分支。我运行了这个命令来检查 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 指向的分支的名称。)

【讨论】:

谢谢!当我在我的仓库中删除 master 分支时,我遇到了同样的问题。 我想很多人现在都会发现这个,随着从 master 切换到 main 的趋势​​。谢谢!【参考方案2】:

这是一个比符号引用更简单的解决方案。


因为您可能已经排除 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) 并且警告消失。

【讨论】:

这个答案对我来说是最容易理解和消化的,而且很有魅力。谢谢。 关于HEAD 应该指向什么,是否有一个(经验法则)规则?换句话说,HEAD 什么时候不指向master @tim.rohrer,经验法则是选择您最重要的分支为HEAD。您、您的团队和协作者在克隆时必须首先看到的分支,很可能是新生产版本的来源。 嗯,好的。似乎对开发人员来说最重要的分支是develop,但生产版本可能来自master。我可以做更多研究,但不确定我明白为什么我们有HEAD 当你克隆一个仓库时,你的新克隆将指向 HEAD【参考方案3】:

只需运行命令 -

#replace the <branch name> with your main branch - master, main, etc.    
git remote set-head origin <branch name>

享受吧!

【讨论】:

请记住,您的 HEAD 可能不会被称为 master。你必须使用你最重要的分支。例如mastermainrc 无论你希望开发人员在哪个分支上。【参考方案4】:

本地master重命名main后会出现一些问题:

git fetch: "致命:找不到远程参考 refs/heads/master"; git branch -u origin/main main: "错误:请求的上游分支 'origin/main' 不存在"; git remote set-head origin main: "错误: 不是一个有效的参考: refs/remotes/origin/main"; git push -u origin main: "错误: 未能将一些参考推送到 'github.com:/.git'"; git symbolic-ref HEAD refs/heads/maingit symbolic-ref refs/remotes/origin/HEAD refs/remotes/origin/maingit update-ref refs/heads/main main, 然后git branch -r:“警告:忽略损坏的参考参考/远程/原点/头”;

这个问题的解决办法:

    git remote -v, 复制 git 仓库 url git remote rm origin,移除遥控器 git remote add origin &lt;REPOSITORY_URL&gt;,重置远程网址 git fetch origin git branch -u origin/main main,重置上游分支

【讨论】:

如果只是重命名:git branch -m master maingit fetch origingit branch -u origin/main main【参考方案5】:

在我的情况下,问题是文件 .git\refs\remotes\origin\master 已损坏,可能是因为我的计算机几天前无意断开了电源。

我通过用正确的引用替换文件内容解决了这个问题,一个 40 字符的十六进制数字,可以在文件 .git\FETCH_HEAD 中找到。

【讨论】:

我不得不做一些与你建议类似的事情,但目标文件 .git/refs/stash 是空的【参考方案6】:

您的远程origin 的默认分支似乎不再存在。 修复遥控器的默认分支:

GitHub:https://github.com/USER_OR_ORG/REPOSITORY/settings/branches -> “默认分支” Bitbucket Cloud:https://bitbucket.org/USER_OR_ORG/REPOSITORY/admin ->“主分支” Bitbucket 服务器:http://git.sid.distribution.edf.fr/projects/PROJECT/repos/REPOSITORY/settings -> “默认分支”

【讨论】:

我认为这行不通。如果您想首先删除该远程分支,则需要更改主分支或默认分支,但更改它并不能修复损坏的参考。【参考方案7】:

就像已经回答的一样 - 警告表明远程分支不再存在,例如当远程分支被合并+删除到另一个分支时。

在我的情况下,我不得不删除我的本地分支,因为不再需要它并且修复损坏的 ref 是不可能的。因此,git branch -d feature/.. 完成了这项工作。

【讨论】:

以上是关于警告:忽略损坏的 ref refs/remotes/origin/HEAD的主要内容,如果未能解决你的问题,请参考以下文章

带有 repo init 命令的错误“致命:refs/remotes/origin/stable^0: not a valid SHA1”

git cannot lock ref

Git - 啥是“Refspec”

git 更新失败

9 jenkins - nhorizons application

如何使用 git 查看 GitHub 拉取请求?