Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从损坏的git工作文件夹恢复文件_Git_Corruption - Fatal编程技术网

如何从损坏的git工作文件夹恢复文件

如何从损坏的git工作文件夹恢复文件,git,corruption,Git,Corruption,我在切换我的Git分支时遇到了一个不幸的事件,当时我没有将它推送到远程存储库。 计算机重新启动并重新登录后,我发现我的工作区已损坏。以下是症状: 分支机构名称为“(…)” .git目录与标准文件和目录(挂钩、信息、日志、对象、引用)一起存在 除了clone和init之外,我执行的所有git命令都导致“致命:不是git存储库(或任何父目录):.git” “$git init”未引发任何错误,但未修复该问题 “$git fsck--full”导致“致命:不是git存储库(或任何父目录):.git”

我在切换我的Git分支时遇到了一个不幸的事件,当时我没有将它推送到远程存储库。 计算机重新启动并重新登录后,我发现我的工作区已损坏。以下是症状:

  • 分支机构名称为“(…)”
  • .git目录与标准文件和目录(挂钩、信息、日志、对象、引用)一起存在
  • 除了clone和init之外,我执行的所有git命令都导致“致命:不是git存储库(或任何父目录):.git”
  • “$git init”未引发任何错误,但未修复该问题
  • “$git fsck--full”导致“致命:不是git存储库(或任何父目录):.git”
  • 只有工作区中的一些目录显示龟形图标,表示没有更改,其他目录没有图标,所有文件都没有图标

有人能帮我让工作区重新进入工作状态,或者恢复分支或存储中的一些文件吗?

今天早上我的一个本地存储库也遇到了同样的问题。在我使用Git的这么多年中,我从未见过这种情况。我已经使用这个特殊的repo 4个月了,但现在它告诉我,当所有目录和文件(包括.git)都存在时,它不是一个git存储库。我的机器(Windows 7)在夜间关闭时出现了一些问题,没有明显的原因,这可能会导致一些损坏,因为我总是让Intellij保持打开状态。我的git版本是1.9.4。我尝试了“git init”来重新初始化本地存储库,但没有帮助。我将Git更新为1.9.5版,没有帮助。本地repo仍然有我的本地设置(git config--local-l)。幸运的是,我经常提交和推送我的分支,所以恢复就像重新克隆一样容易,但它仍然让我抓挠。我将我现有的本地repo重命名为其他名称,然后重新克隆了远程存储库,现在新的克隆(旧的仍然死了)一切正常。

在我以前同事的大量帮助下,我想出了如何从中恢复过来。您可能希望将此作为最后手段,因为您可能会丢失一些信息,并且这可能因为腐败而不起作用

让我们将损坏的工作区命名为“corruptWorkspace”,要修复的工作区命名为“fixWorkspace” 您需要执行的第一步是创建一个新的工作区来执行恢复并复制对象和参照:

  • $mkdir固定工作区
  • $cd固定工作区
  • $git init
  • $cp../corruptWorkspace/.git/objects.git-r-a
  • $cp../corruptWorkspace/.git/refs.git-r-a
  • 从这里可以恢复分支/提交

  • 在.git\refs\heads或.git\logs\HEAD文件中查找要恢复的分支
  • 在文本编辑器中打开,您将在分支文件中找到该分支的最后一个提交SHA,或者在头文件中找到该分支的最后一条记录的第二个SHA列
  • 此命令应可读,并显示上次提交的更改

  • $git show[commit SHA]
  • 确认分支看起来正常后,尝试检查它

  • $git签出[分支机构名称]
  • 然后可以重置分支

  • $git重置--硬
  • 此时,您拥有分支的最新提交版本。下一步是恢复隐藏文件

  • 在.git\refs\stash或.git\logs\stash文件中查找要恢复的存储
  • 在文本编辑器中打开,您将在存储文件中找到该存储的最后一个提交SHA,或者在存储文件中找到分支的最后一个存储记录的第二个SHA列
  • 列出要恢复的存储中的文件,从这里可以获得用于恢复文件的存储位置和文件

  • $git show--仅限姓名[stash SHA]
  • 恢复隐藏的文件

  • $git show[stash SHA]:[文件的完整路径]>[文件的完整路径]
  • 对所有隐藏文件执行上述命令后,就完成了分支和隐藏文件的获取。如果配置文件没有损坏,您甚至可以复制“源”定义并推送更改


    祝你好运

    在从一个分支签出到另一个分支时,我的计算机由于电源故障而关闭。当我打开电源时,我发现我的存储库已损坏。 我已将存储库克隆到新文件夹“new clone” 从“罗伊B”回答 我已将“新克隆”文件夹替换为包含分支和其他信息的“损坏的git文件夹”

    • ../corruptWorkspace/.git/objects
    • ../corruptWorkspace/.git/refs 而且
    • ..\corruptWorkspace.git\logs


    Repository restored

    我没有读到这篇文章,但它可能会给你一些帮助。我是否正确理解你,你使用Windows,Windows上的某种bash,并且没有任何命令(除了
    git init
    )不能正常工作,尽管你的项目文件夹中有
    .git
    文件夹?没错,我在Windows7上运行,下载并安装了git客户端二进制文件(它有一个bash仿真器)和两个GUI(TortoiseGit和git扩展)。是的,有一个问题。对不起,我不知道该怎么处理。我从来没有听说过类似的事情。作为最后手段,我建议您查找一些类似于我上面发布的链接的信息,并尝试对您的.git文件夹中剩余的内容进行处理。您是否尝试克隆您当前的本地(和损坏的)回购协议,只是为了检查新的本地克隆是否会显示相同的错误?另一个潜在原因是索引文件已损坏。解决这个问题的办法是非常感谢Roy B,我可以恢复我所有的功能分支。这不是问题的答案。你能在你的答案上扩展一下你实际做了什么吗?