代码之家  ›  专栏  ›  技术社区  ›  lost9123193

修复windows中损坏的松散git头

  •  1
  • lost9123193  · 技术社区  · 6 年前

    我的计算机由于内核恐慌而关闭了,我在windows虚拟机上丢失了git repo。当我在.NET上运行时,会出现以下错误:

    corrupted loose reference file: HEAD
    

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

    enter image description here 有没有办法把它转换回git实体?或者我需要重新整理目录吗?

    2 回复  |  直到 6 年前
        1
  •  3
  •   Mark Adelsberger    6 年前

    你在展示什么 .git 目录不是分支的列表;它是git repo元数据的标准结构。这包括一些符号参考,例如 HEAD 是的。当ref作为一个文件存储在磁盘上时,它被称为“loose”ref,这就是我认为错误消息所说的。

    所以这个错误似乎表明 .git/HEAD 是腐败的。这本身并不难修复(尽管大多数git命令不会起作用,因为它们目前还没有意识到这是一个回购协议,所以需要一点时间);更大的问题是,在突然的系统崩溃之后,是否还有其他东西也会损坏。但作为起点,你可以尝试

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

    现在希望你的回购协议能再次被认可。下一步,做一些检查是明智的,比如

    git fsck
    

    可能还要检查一下预期的分支是否有更改。

    最脆弱的是未提交的更改(尤其是未提交的更改)。但至少如果上述步骤进行得很好,你可以评估损失并决定从哪里开始。

        2
  •  1
  •   Nimeshka Srimal    6 年前

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

    这就是我要做的:

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

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

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

    希望对你有用:)