2

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

corrupted loose reference file: HEAD

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

在此处输入图像描述 有没有办法可以将它转换回 git 实体?还是我必须重新克隆目录?

4

3 回答 3

4

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

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

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

现在希望您的回购将再次得到认可。接下来做一些检查会很聪明,比如

git fsck

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

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

于 2018-07-11T18:56:28.243 回答
2

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

这就是我要做的:

  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,你应该看到你修改过的文件等。

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

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

希望它对你有用:)

于 2018-07-11T18:35:26.580 回答
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. 尝试再次从原点拉
于 2020-07-16T18:20:52.287 回答