在 Windows 蓝屏后恢复 git 存储库?

recovering a git repo after a Windows blue screen?

我刚遇到蓝屏,我把上周左右的所有工作都藏起来了,但现在它不见了……好吧,我可以看到 .git 文件夹在资源管理器中,但做 git status or fsck 它说它不是 git 回购...这是 powershell

上的一个小游戏

PS C:\Users\tyoc\Documentos\wtf> git status fatal: Not a git repository (or any of the parent directories): .git PS C:\Users\tyoc\Documentos\wtf> cd .git PS C:\Users\tyoc\Documentos\wtf\.git> git status fatal: Not a git repository (or any of the parent directories): .git PS C:\Users\tyoc\Documentos\wtf\.git> cd .. PS C:\Users\tyoc\Documentos\wtf> git init Reinitialized existing Git repository in C:/Users/tyoc/Documentos/wtf/.git/ PS C:\Users\tyoc\Documentos\wtf> git status fatal: Not a git repository (or any of the parent directories): .git PS C:\Users\tyoc\Documentos\wtf> git fsck --no-reflog fatal: Not a git repository (or any of the parent directories): .git PS C:\Users\tyoc\Documentos\wtf> git stash fatal: Not a git repository (or any of the parent directories): .git

如果能把藏品拿回来就好了,因为幸运的是,repo 有一个中央存储库,所以那里一切都很好......但我的工作不是,如果我一个星期没做任何东西会怎么样... :S.


我添加这个是为了澄清:

蓝屏前的 repo 状态是我的工作在存储中(我有 7 个旧存储,最后一个是我这周的工作),因为我的客户要求我修改一些东西(所以我把我正在做的事情藏起来了)做了改变并推送了......在我恢复藏匿之前几秒钟我得到了蓝屏,然后在 reebot 之后,我无法执行任何 git 命令,即使是.git dir 在那里...(我不知道它是否包含某些内容或只是结构)。

因此,文件的状态是一个干净的工作副本(因为此时请求更改),而我的实际工作是 /IS 在存储中。 ..

好吧,我使用 sourcetree 作为前端...不知道是 sourcetree 的错还是一天结束时的蓝屏..但问题是我在 stash 中丢了工作。 ..

我先备份了我的垃圾 git 仓库,然后我按照@equivalent8 的建议克隆了仓库,但没有全部替换,我只在 .git 中使用了这个文件:

  • 配置
  • FETCH_HEAD
  • 索引
  • 打包参考
  • sourcetreeconfig

这使得 sourcetree 能够打开并且 git 状态正常工作(即它又是一个 git 回购)。

然后从我把搜索稍微修改成这样

git fsck --no-reflog | select-string 'dangling commit' | foreach { $bits = $_ -split ' '; echo $bits[2]; git show $bits[2]}

所以我可以看到每个差异并逐个检查提交,如果它是一个候选者,我复制了第一行上面的哈希,然后前进到下一个 mach 按 q

然后我为每个候选人做了

git diff 52abca5cba3ff37b4954fd2c2e12c867dceb9481 --color=never > 52abca.patch git diff 48f7110fa9d507226ce31593a0fc957e465d6c91 --color=never > 48f711.patch

免得我又丢了,查了一下候选人,我的作业还在!!! (我认为)

但我不能应用它们来检查每个文件,我每次都得到 error: unrecognized input git apply 48f711.patch,我猜我需要手动复制每个文件 paste/delete? ??

我的 git 存储库出现蓝屏,显然已损坏,这是我这边发生的。我注意到文件 .git/HEAD 是空的。我通过将以下内容添加到 .git/HEAD:

来解决问题
ref: refs/heads/master