在Windows蓝屏后恢复git repo?

时间:2017-11-07 09:50:57

标签: git recovery blue-screen-of-death

我刚看到一个蓝色的屏幕,我在上一周左右的所有工作都藏在了藏匿处,但是现在它已经消失了......好吧,我可以在资源管理器中看到.git文件夹但做git status or fsck它说它不是一个git repo ......这里有一个关于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

收起藏品会很好,因为幸运的是,仓库有一个中央存储库,所以一切都很好......但是我的工作不是,如果我一周没有做任何事情怎么样? 。:S。

我添加此内容以澄清:

蓝色屏幕前的回购状态是我的工作在藏匿处(我有7个旧的藏匿处,这最后是我本周的工作),因为我的客户要求我修改一些东西(所以我做我正在努力的东西)做了改变并推动......在我恢复藏匿之前几秒钟我得到了蓝屏,然后在reebot之后,我甚至无法做任何git命令.git目录在那里...(我不知道它是否包含某些东西或只是结构)。

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

而且我使用sourcetree作为前端...不知道在一天结束时是不是sourcetree的故障还是蓝屏...但事实上我在保管中丢失了我的工作......

2 个答案:

答案 0 :(得分:1)

我的git存储库后面的蓝色屏幕显然已经损坏了,就在我的结尾。我注意到文件.git / HEAD是空的。我通过将以下内容添加到.git / HEAD:

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

答案 1 :(得分:0)

我首先备份了我已删除的git repo,然后我按照@ equivalent8的建议克隆了repo,但没有全部替换它,我只在.git中使用了这些文件:

  • 配置
  • FETCH_HEAD
  • HEAD
  • 索引
  • 填充参
  • sourcetreeconfig

这允许sourcetree能够打开和git状态工作(即它再次是一个git repo)。

然后从https://stackoverflow.com/a/91795/682603我修改搜索有点像这样

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

所以我可以看到每个差异并通过提交检查提交,如果它是候选人我复制了第一行上方的哈希值,并前进到下一个按下q的马赫。

然后我为每个候选人做了

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

所以我不再失去他们,并检查了候选人,我的工作仍在那里! (我认为)

但是我无法应用它们来检查每一个,每次error: unrecognized input我得到git apply 48f711.patch,我想我需要手动复制粘贴/删除每个文件???