警告:忽略损坏的 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
。你必须使用你最重要的分支。例如master
、main
、rc
无论你希望开发人员在哪个分支上。【参考方案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/main
或 git symbolic-ref refs/remotes/origin/HEAD refs/remotes/origin/main
或 git update-ref refs/heads/main main
,
然后git branch -r
:“警告:忽略损坏的参考参考/远程/原点/头”;
这个问题的解决办法:
git remote -v
, 复制 git 仓库 url
git remote rm origin
,移除遥控器
git remote add origin <REPOSITORY_URL>
,重置远程网址
git fetch origin
git branch -u origin/main main
,重置上游分支
【讨论】:
如果只是重命名:git branch -m master main
→ git fetch origin
→ git 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/..
完成了这项工作。
【讨论】:
以上是关于警告:忽略损坏的 ref refs/remotes/origin/HEAD的主要内容,如果未能解决你的问题,请参考以下文章
带有 repo init 命令的错误“致命:refs/remotes/origin/stable^0: not a valid SHA1”