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

从几天前开始,每次我按 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/

【问题讨论】:

标签: git bash


【解决方案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:“警告:忽略损坏的参考参考/远程/原点/头”;

这个问题的解决办法:

  1. git remote -v, 复制 git 仓库 url
  2. git remote rm origin,移除遥控器
  3. git remote add origin &lt;REPOSITORY_URL&gt;,重置远程网址
  4. git fetch origin
  5. 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 的默认分支似乎不再存在。
修复遥控器的默认分支:

【讨论】:

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

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

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

【讨论】:

    猜你喜欢
    • 2021-03-29
    • 2016-05-01
    • 2017-12-07
    • 2016-09-05
    • 2018-12-25
    • 2021-02-05
    • 2013-09-25
    • 2018-01-12
    • 1970-01-01
    相关资源
    最近更新 更多