修复Windows中损坏的松散Git头

时间:2018-07-11 17:46:16

标签: git file corrupt loose

由于内核紧急而关闭了计算机,我在Windows上的虚拟机上丢失了git repo。当我进入.net时,出现以下错误:

corrupted loose reference file: HEAD

我有一个名为.git的文件夹,其中包含我的分支机构列表。

enter image description here 有什么方法可以将其转换回git实体吗?还是我必须重新克隆目录?

3 个答案:

答案 0 :(得分:3)

您在.git目录中显示的不是分支列表;而是这是git repo元数据的标准结构。这包括一些符号引用,例如HEAD。当一个引用作为文件存储在磁盘上时,它被称为“松散”引用,这就是我认为错误消息所讨论的。

因此该错误似乎表明文件.git/HEAD已损坏。这本身并不难解决(尽管大多数git命令无法正常工作,因为它们目前无法识别出这是一个回购协议,因此可能会有点麻烦);在突然的系统崩溃之后,一个更大的问题是其他任何东西是否也损坏了。但是作为起点,您可以尝试类似

# back up .git/HEAD somewhere, just in case
echo 'ref: refs/heads/master` >.git/HEAD

现在希望您的存储库将再次被识别。接下来,进行一些检查会很聪明

git fsck

,也许检查您在预期分支上是否有预期的变化。

最脆弱的是未提交的更改(尤其是未分阶段的更改)。但是,至少如果上述步骤顺利进行,您就可以评估损失并决定从那里去哪里。

答案 1 :(得分:1)

您可以将其设置为上一个阶段,而无需再次克隆存储库。您也许可以保留本地更改,但是您将丢失所有未按下的提交或存储。

这就是我要做的:

  1. 备份git存储库。 (只要有需要就复制它)。
  2. 删除.git文件夹(在Linux,rm -rf .git中)
  3. git init
  4. git remote add origin <your remote repository url>
  5. git fetch
  6. git reset origin/<the last branch you were in>
  

这很重要:如果您位于Development分支中,则将其命名为origin/Development

现在,所有内容都应恢复原位。如果您运行git status,则应该看到修改后的文件等。

这只是一个建议。您可以复制文件夹并尝试一下:)

编辑:我错过了一个重要步骤。添加原点后,您需要提取。

希望它对您有用:)

答案 2 :(得分:0)

我通过以下操作进行了修复:

  1. 以邮编为例,以防万一您删除了错误的内容
  2. 使用编辑器(NotePad ++或VisualStudio Code)在所有文件中搜索对您的错误分支的引用。例如,在NotePad ++中,按Ctrl + shft + F并查找feature / my-bad-branch
  3. 打开带有该引用的文件,并确定是否应删除引用
  • 我只需要从.git / config中删除分支
  • 我没有在日志中删除对其的任何引用
  1. 在.git / refs / remotes / origin文件夹和子文件夹中查找与分支名称相同的文件。例如.git / refs / remotes / origin / feature / my-bad-branch。删除该文件
  2. 尝试再次从原点撤出