在 Windows 中修复损坏的松动 Git

Fix Corrupted Loose Git Head in Windows

我的计算机由于内核恐慌而关闭我在 Windows 中的虚拟机上丢失了 git 存储库。当我继续使用 .net 时,出现以下错误:

corrupted loose reference file: HEAD

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

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

您可以将其设置为您之前的阶段,而无需再次克隆存储库。您可能能够保留本地更改,但您将丢失所有未推送的提交或存储。

这就是我要做的:

  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>

This is important: If you were in the Development branch, then give it as origin/Development.

现在一切都应该回到原位。如果你 运行 git status,你应该会看到你修改过的文件等

这只是一个建议。你可以复制你的文件夹试试看:)

编辑:我错过了一个重要的步骤。添加源后需要获取。

希望它对你有用:)

您在 .git 目录中显示的不是分支列表;它是 git 回购元数据的标准结构。这包括一些符号引用,例如 HEAD。当 ref 作为文件存储在磁盘上时,它称为 "loose" ref,我认为这就是错误消息所指的内容。

所以错误似乎表明文件 .git/HEAD 已损坏。这本身并不难修复(尽管大多数 git 命令都不起作用,因为它们目前无法识别这是一个回购协议,因此需要一些努力);更大的问题是,在突然的系统崩溃之后,是否还有其他任何东西也被破坏了。但作为起点,您可以尝试

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

现在希望你的回购能再次被识别。接下来做一些检查会很聪明,比如

git fsck

并且可能会检查您是否对预期的分支进行了预期的更改。

最容易受到攻击的是未提交的更改(尤其是未暂存的更改)。但至少如果上述步骤顺利,您可以评估损失并决定从那里去哪里。

我通过执行以下操作修复:

  1. 压缩你的 repo 以防你删除错误的东西
  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. 再从原点拉动