严重损坏的 git 存储库

2024-02-13

接下来的内容很长,所以简而言之:我有一个严重损坏的存储库,我有备份,并且我想返回到稳定状态,以便我可以恢复文件(如果必须的话,可以手动恢复)。我将整个存储库复制到另一个文件夹中,其中包含我的更改列表,因此如果这一切都变坏了,我可以轻松手动传输。

我首先尝试提交代码并得到:

error: invalid object 100644 e9fede64cd0e6499fb3740d81d45d14768b27ffb for 'app/views/free_emp_opinions/new.html.erb'
error: invalid object 100644 e9fede64cd0e6499fb3740d81d45d14768b27ffb for 'app/views/free_emp_opinions/new.html.erb'
error: Error building trees

我使用备份手动替换该文件然后得到:

error: invalid object 100644 e6317da4299554ce7eb39e9baa0b49d4b30743db for 'app/views/link_groups/show.html.erb'
error: invalid object 100644 e6317da4299554ce7eb39e9baa0b49d4b30743db for 'app/views/link_groups/show.html.erb'
error: Error building trees

调试开始:

git status
fatal: unable to read e9fede64cd0e6499fb3740d81d45d14768b27ffb

git prune
error: Could not read ef528d9533bb296f0ff528551527b787cfd3c888
fatal: bad tree object ef528d9533bb296f0ff528551527b787cfd3c888

git reset --hard
error: unable to read sha1 file of app/views/free_emp_opinions/new.html.erb (e9fede64cd0e6499fb3740d81d45d14768b27ffb)
error: unable to read sha1 file of app/views/link_groups/show.html.erb (e6317da4299554ce7eb39e9baa0b49d4b30743db)
fatal: Could not reset index file to revision 'HEAD'.

现在我运行:

git fsck --full
Checking object directories: 100% (256/256), done.
Checking objects: 100% (26833/26833), done.
broken link from    tree 0a6b00e8d1937c3e31c5e75d9de939c97adc205f
              to    blob e9fede64cd0e6499fb3740d81d45d14768b27ffb
broken link from    tree 367acd2750e703d44cb76403ea74c69d02130e09
              to    tree ef528d9533bb296f0ff528551527b787cfd3c888
broken link from    tree 0b7c7ac1d8475b355d2f382d1220dd0a53dc83ac
              to    blob e02d8b0123c0891206f9fb9f43c1ec7b3e32495b
broken link from    tree 2c4b398e161573622d6d50b96d31084209325569
              to    tree dc1eace38a6510ef25cb7d0b5debf5216fccd948
broken link from    tree 2c4b398e161573622d6d50b96d31084209325569
              to    tree e2dca328dac5f632b1c768e6e52767aef11f0266
broken link from    tree 479d84ae8cd3a0bf0ff8f28da4b41f9fe3cd793c
              to    blob e70452a6561eabbc568e5e23acf30ea84dd4fba4
broken link from    tree 49cdccd88608729674cad489d1a93f4a210f96ca
              to    tree e4172bffc23b279fd6e98b5831179bac26109ebb
broken link from  commit 4310cd9376a2f633ac26b29e90c472cf14f60765
              to    tree e3071ddca12fa64996ff0ab2cf7b7511e57c42c1
dangling blob 1a011db92445954272ddd5529316023fbbe607e4
dangling blob 5201c769001b1032c052d2fa81831ae9f6c525dd
dangling blob 7c023ab3a58f916f7871b525c23233e8386fa1a8
dangling blob 5d03033fee1d65ff431548c8b2a678ea250dbb90
dangling commit c5030fe567bc734d2c7381b24d196d2d68e8cfa8
dangling blob b504169a1d1cffc2646eb4ba75d0e65df2d4932f
missing blob e70452a6561eabbc568e5e23acf30ea84dd4fba4
dangling blob d6058a10a39afa230991fd633482ac0e768ea383
dangling blob 4606c7d01b21621c70393beb0000c174ddf038dc
missing tree e3071ddca12fa64996ff0ab2cf7b7511e57c42c1
dangling blob af1111e218aba1a936c20a69b35a529efa8d959a
dangling blob 59126b4617ac8cae1cabfd209396a276c796724a
dangling blob ea12b047dc5c8cd0ae5b6f446b09a49d2f066902
...another 60+ issues...

git reset --hard HEAD@{1}
error: unable to read sha1 file of app/views/free_emp_opinions/new.html.erb (e9fede64cd0e6499fb3740d81d45d14768b27ffb)
error: unable to read sha1 file of app/views/link_groups/show.html.erb (e6317da4299554ce7eb39e9baa0b49d4b30743db)
fatal: Could not reset index file to revision 'HEAD@{1}'.

我尝试了其他人提出的一些建议:

git log | head
commit e89d926275c25e1ed859a5c00c870a69cf857ce0
Author: sscirrus <***>
Date:   Wed Mar 18 16:44:04 2015 -0400
Tweak: change emphome job rightmost readout from date first posted to date of last activity

commit a0d97a6a5308a2b18504fa3394fea7efa43c06b0
Author: sscirrus <***>
Date:   Wed Mar 18 13:25:49 2015 -0400    

我还能尝试什么?


根据@jsexpert的建议,我跑了:

git gc --prune=now
error: Could not read ef528d9533bb296f0ff528551527b787cfd3c888
fatal: bad tree object ef528d9533bb296f0ff528551527b787cfd3c888
error: failed to run repack

当然,git fsck返回相同的错误。


由于存储库中存在大量错误并且完全无法运行类似命令git gc or git status,我做了以下事情:

恢复之前

  • 将所有数据 Icloud 从 git 复制到一个单独的文本文件,汇总已提交和未提交的更改。
  • 打开两份 gitk 副本(为了安全)并将其保留以供将来参考。

Restore

  • 使用 Time Machine (OS X) 查找可以响应的最新备份git gc(大约一周前)。
  • 备份当前损坏的存储库。
  • 在当前存储库之上恢复了干净的备份。
  • 使用文本文件手动将更改复制/粘贴到备份上。

Result

  • 完全干净的 git 存储库更新到检测到损坏之前的状态。

我希望这对您有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

严重损坏的 git 存储库 的相关文章

  • 使用 Git 处理 subversion:忽略对跟踪文件的修改

    我目前正在使用 subversion 存储库 但我正在使用 git 在我的计算机上本地工作 它使工作变得更加容易 但也使 subversion 存储库中发生的一些不良行为变得非常明显 这给我带来了问题 拉取代码后 有一个有点复杂的本地构建过
  • 为什么 git 无法识别我的本地存储库?

    我刚刚回到一个我已经使用 Git 大约 6 个月的项目 看到了这个 cd d DEVELOP BlenderAe My repo root git status fatal not a git repository or any of th
  • 使 .git 目录 web 不可访问

    我有一个网站 我使用 github 闭源 来跟踪更改和更新网站 唯一的问题是 git 目录似乎可以通过网络访问 我怎样才能停止这个并且仍然能够使用 git 我应该使用 htaccess 吗 我应该更改 git 的权限吗 把这个放在一个 ht
  • “git merge --squash”的正确用例是什么?

    有些人喜欢git merge squash由于以下原因 压缩到单个提交使您有机会清理混乱的 WIP 提交 并为您要合并的更改提供良好的理由 https coderwall com p qkrmjq git merge squash http
  • 我可以获取两次提交之间 git 子文件夹中已更改文件的列表吗?

    我有一个包含许多文件夹的 git 存储库 我需要找出在两次提交之间这些文件夹之一中的哪些文件发生了更改 有没有一个好的方法来做到这一点 我想你可以坚持走最后的路git diff git diff HEAD HEAD special fold
  • 使用 SourceTree 克隆存储库

    有人可以给我一个简单的使用 SourceTree 克隆存储库的快速演练吗 在书签中 我单击克隆存储库 对于源路径 我粘贴如下所示的 URL 电子邮件受保护 cdn cgi l email protection 客户端 应用程序名称 ios
  • 在 git 中管理 schema.rb 的首选方法是什么?

    我不想添加schema rb to gitignore 因为我希望能够从该文件加载新的数据库架构 然而 保持检查状态会导致各种虚假冲突 而这些冲突很容易通过新的解决方案解决 db migrate reset 基本上我想要一种方法 将 sch
  • Git 与人工制品

    刚刚完成 NPM 和 Bower 的 Artifactory 设置 它非常容易使用 您只需更改存储库 URL 一切就正常了 查看有关如何让 Artifactory 与 github vcs 一起使用的文档 它看起来过于复杂 我想知道是否有人
  • GitHub - 指定时间的存储库状态

    我是使用 git 版本控制工具的初学者 我想在指定时间 例如 2013 年 10 月 5 日 下载存储库状态 文件 我怎样才能做到这一点 截至 2019 年 5 月 不确定何时引入 您可以简单地按以下格式添加日期 HEAD 2019 04
  • git tag --contains 如何工作?

    从几天前开始 我一直在尝试确定在哪个版本 由标签指定 中部署了特定修复 由提交指定 这里的一些帖子发布了这一点git tag contains是收集这些信息的方法 但是选项的文档 https git scm com docs git tag
  • Git rebase --继续而不打开编辑器

    调用时git rebase continue在正常的变基冲突之后 编辑器 GIT EDITOR 打开并要求修改提交消息 因为提交消息可能包含前导 所以这可能会失败 export GIT EDITOR true git rebase cont
  • 将两个单独的功能分支合并到同一个主分支中[重复]

    这个问题已经存在了 我们正在努力发布 2 个远程功能分支 F2 和 F3 我们如何处理F3来创建发布 提案1 简单地合并F3进入开发 提案2 第一次合并开发进入F3 包括F2的变化 然后合并进入发展 这两种方法之间有什么实际差异 是否有客观
  • Git 分支之间未跟踪的文件

    我一直在这里寻找答案 看来我可能只是对 git 分支应该如何工作做出了错误的假设 我有我的master分支 我创建了一个名为的功能分支profiles我正在对个人资料进行一些特定的工作 在处理配置文件时 我更改了 5 或 6 个文件 并添加
  • 为什么我的存储库的 github 页面中没有出现问题选项卡?

    我想在 github 存储库中创建问题来纠正存储库中的技术债务 我看不到问题选项卡 对于其他存储库 问题选项卡显示在拉取请求选项卡下方 如何为我的存储库启用问题选项卡 您必须先启用问题 您可以通过点击来做到这一点Settings并启用 问题
  • git log --oneline 提供在管道或重定向到文件时丢失的 HEAD 信息

    当我执行没有管道或文件重定向的 git log oneline 命令时 它会提供有关 HEAD 位置和分支的信息 下面示例中的 master git log oneline color never 8bc8511 HEAD gt day 2
  • 将远程更改合并到非当前分支的分支中

    我有多个分支 我想将远程更改合并到一个分支中不是我当前的分支 例如 git merge remote branch some other branch 仅当本地分支可以快速转发到远程头时 这才是可行的 在任何分支中 要从源获取远程分支并更新
  • 设置单独的遥控器以仅推送和拉动子文件夹

    假设我有两个存储库 repo A and repo B 其中包含一个文件夹 其中的代码与存储库 A 中的代码类似 这实际上如何发生并不重要 但是好吧 让我们假设我刚刚从 A 复制了内容 现在我想要以下内容 就像我在 repo A 中习惯的那
  • GitPython - 使用 ssh 密钥克隆 - 主机密钥验证失败

    我在应用程序中克隆 git 存储库时遇到问题 KEY FILE opt app ssh id rsa def read git branch config id branch config RepoConfig objects get id
  • 如何克隆没有提交的裸 git 存储库并在克隆过程中获取正确的 HEAD 引用?

    这个答案 https stackoverflow com a 26898059 438273声称该问题已在版本中修复1 8 4 3 但是我在版本中还是遇到了2 25 1 它似乎在版本中按预期工作2 32 0 所以我不确定它是什么时候真正修复
  • 我应该如何将更改从一个提交转移到另一个提交?

    我在同一个分支上有两个提交 一个接一个 我在第一次提交中添加了对文件 A 的更改 然后对其他文件进行了一些更改 然后进行了另一次提交 现在我希望对文件 A 的更改是在第二次提交而不是第一次提交 最优雅的方式是什么 我知道这是一个老问题 但我

随机推荐