重置操作系统后“不是git存储库”

时间:2016-12-01 09:58:04

标签: windows git

今天早上,当我拿起笔记本电脑的屏幕时,我的Windows 10崩溃并重新启动。没有特别的活动在进行,所以我认为没有重要的磁盘活动。

然而,我的一个主要Git回购在重置后崩溃了。这是我试过的:

  • $ git status 致命的:不是git存储库(或任何父目录):。git
  • $ git init 在...... / .git /
  • 中重新初始化现有的Git存储库
  • $ git status 致命的:不是git存储库(或任何父目录):。git
  • 循环

我认为我没有删除提交,因此从远程擦除和克隆应该可以正常工作。

在这种情况下,我可以问一下如何恢复现有的Git存储库(.git目录仍然存在,chkdsk报告正常)?

[添加]阅读this但不适用于我的情况(我无法恢复回购)

4 个答案:

答案 0 :(得分:14)

作为kabanus said in a comment,您应该在继续之前保存所有内容(和/或使用其他现有克隆作为备份)。

但是,当Git抱怨这一点时,通常意味着文件.git/HEAD已经丢失。如果您创建一个内容为HEAD的新ref: refs/heads/master文件,Git可能会恢复所有内容。

由于HEAD是存储库中最活跃的文件,因此它最容易受到操作系统错误或电源故障的影响。当Git认为.git目录是存储库时,它也是一个关键文件:如果目录包含名为HEAD的文件(以及一些其他关键项),它存储库;如果没有,它是一个存储库。

答案 1 :(得分:1)

我有多个分支由于操作系统错误而崩溃(blood windows睡眠功能!)。所以我必须手动执行以下操作:

  1. .git / HEAD (将内容设置为ref: refs/heads/master
  2. $> git branch -v(这将告诉您所有损坏的分支)
  3. .git / logs / HEAD (读取文件以获取提交的最后校验和并合并损坏的分支)
  4. .git / refs / heads / {损坏的分支文件} (将校验和更改为日志文件中的最后一个有效校验和。
  5. 根据需要再次合并分支。

答案 2 :(得分:0)

另一种解决方法,当操作系统在GIT MERGE操作崩溃时为我解决了

  1. 从其他贡献者处获取.git /目录(您项目的目录)下的有效HEAD,FETCH_HEAD文件
  2. 用新文件(从其他贡献者那里获取)替换现有的HEAD,FETCH_HEAD文件。
  3. 删除.git /目录下的INDEX。
  4. 然后进行git pull。

答案 3 :(得分:0)

就我而言,HEAD文件确实由于系统崩溃而损坏。

我刚刚再次将存储库克隆到一个新文件夹中,切换到我所在的分支,然后将.git文件夹替换为我刚刚从克隆中创建的那个文件夹。

从那里开始,好像什么都没有发生。