Git 存储库损坏(标头检查不正确;松散对象已损坏)

2024-06-03

昨天晚上我在写提交消息时遇到了电源故障。当我重新启动机器时,我无法完成提交。我跑了git reset,添加回更改的文件,然后再次尝试,得到:

% git commit
error: inflate: data stream error (incorrect header check)
error: unable to unpack a94406345ac44982b00cf57b4b9660a35436637f header
fatal: a94406345ac44982b00cf57b4b9660a35436637f is not a valid object

git fsck揭示了以下内容:

% git fsck --full
Checking object directories: 100% (256/256), done.
error: inflate: data stream error (incorrect header check)
error: unable to unpack 4346883490a0990e68db0187241abc1642765a73 header
error: inflate: data stream error (incorrect header check)
fatal: loose object 4346883490a0990e68db0187241abc1642765a73 (stored in .git/objects/43/46883490a0990e68db0187241abc1642765a73) is corrupt

我注意到这些消息抱怨不同的对象。

我搜索了 Stack Overflow 和网络,并尝试了一些不同的方法,但没有成功。

  • 我没有最近的备份副本。
  • 将存储库克隆到另一个目录没有帮助;新的存储库也出现了完全相同的问题。
  • git stash给出相同的消息git commit。所有其他 git 命令似乎都可以正常工作。

我怎样才能知道出了什么问题并解决它?

git log输出(仅前几行):

% git log --oneline --decorate --all |head -n 8
253b086 (HEAD, new_tokenize) Normalized tokenizer interface slightly
0f2425a (master) Added procs to eval layer
a4d4c22 Added procedures as a type
d1e15ad (tag: v0.10) Added `if' form with tail call semantics
f94a992 (tag: v0.9) Completed environments
031116e Fixed bug where # on a line by itself caused segfault
3d8b09f Added environments, define and set!
01cc624 Put symbol table implementation into types.c

这是一个小型的个人项目;我通常只是工作于(master),但我当时正在做一个实验(new_tokenize)。 253b086 是断电前最后一次成功提交。


看来 git 在 .git/objects 中为新提交创建了文件,但没有成功写入它们。我通过一次删除一个并重新运行来解决这个问题git fsck --full找到下一个。我从最初报道的那个开始git fsck:

% rm -f .git/objects/43/46883490a0990e68db0187241abc1642765a73
% git fsck --full
Checking object directories: 100% (256/256), done.
error: inflate: data stream error (incorrect header check)
error: unable to unpack 86e7247af5865e857a3b61eed99986e2d9538df1 header
error: inflate: data stream error (incorrect header check)
fatal: loose object 86e7247af5865e857a3b61eed99986e2d9538df1 (stored in .git/objects/86/e7247af5865e857a3b61eed99986e2d9538df1) is corrupt
% rm -f .git/objects/86/e7247af5865e857a3b61eed99986e2d9538df1
% git fsck --full
Checking object directories: 100% (256/256), done.
error: inflate: data stream error (incorrect header check)
error: unable to unpack a94406345ac44982b00cf57b4b9660a35436637f header
error: inflate: data stream error (incorrect header check)
fatal: loose object a94406345ac44982b00cf57b4b9660a35436637f (stored in .git/objects/a9/4406345ac44982b00cf57b4b9660a35436637f) is corrupt

等等。我之前删除了五个对象git fsck出来的结果很干净,(正如我认为的)对应于我试图提交的五个文件。我猜文件历史记录根本没有损坏。

顺便说一句,我想到了另一种方法,似乎也有效。git clone复制坏对象,但是git push才不是。备份后,我创建了一个新的空存储库(--bare,因为否则你无法推送到 master),然后取消暂存我的更改并将两个分支推送到新存储库中。然后只需再次检查并从备份中恢复最新更改即可。

如果有人愿意阐明这里的故障机制,仍然感兴趣。

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

Git 存储库损坏(标头检查不正确;松散对象已损坏) 的相关文章

  • “*text=auto”和“*text=auto eol=lf”有什么区别?

    我正在读关于 gitattributes文件和强制行结尾的规则some https rehansaeed com gitattributes best practices line endings教程是这样写的 text auto and
  • 如何下载 GitHub 版本的二进制文件?

    我有一个包含我需要的二进制文件的存储库 I can git checkout tags thetagoftherelease 这似乎检查了正确的标签 但没有拉下二进制文件 如何获取添加到版本中的二进制文件 版本上的绿色框 在版本中添加了二进
  • 解决方案具有位于解决方案文件夹外部的项目

    我尝试通过选择将我的解决方案添加到本地存储库File 添加到源代码管理 但我收到以下消息 源代码控制 Git当前解决方案包含位于解决方案文件夹外部的项目 这些项目不会在 Git 存储库中进行源代码控制 要将所有项目添加到单个 Git 存储库
  • 当你的项目有秘钥时,如何推送到 GitHub?

    我正在尝试将一个全新的空 Rail 3 0 4 项目推送到 GitHub 但刚刚意识到 cookie 会话存储有一个密钥 In config initializers secret token rb NewRuby192Rails304Pr
  • libgit2如何获取当前目录的状态?

    如何获取单个目录而不是整个存储库的状态 我查看了以下内容 git status list new它获取存储库状态 但我只关心位于单个目录中的文件 git status file获得单身状态 有没有办法可以使用 libgit2 获取单个目录的
  • 如何提交 git 标签?

    我已成功对中央 git 存储库进行 提交和推送更改 我现在意识到我想标记所有文件的当前版本 所以我这样做 git tag a 0 5 这样就成功了 但现在我尝试git push我被告知没有什么可承诺的 如何将新标签推送到中央存储库 注意gi
  • GIT Pull 删除了我的提交

    在 git pull 之后 我已经完成了 git Reset 以在合并之前撤消与提交 ID 的合并 不知何故 我的整个提交都消失了 而且我也无法在历史记录中看到该提交 但我有提交 id 在 git show 命令上我可以看到我的更改 我如何
  • Git 子树导出和重新导入问题

    我有一个更大的 git 存储库 A 它与我的另一个项目 B 共享一定量的代码 为了使维护更容易 我决定使用公共代码 C 创建第三个存储库 然后通过git subtree 我准备了 A 中的所有内容 将通用代码放在文件夹 sub 中 并使用了
  • 如何比较本地 Git 分支与其远程分支

    我怎样才能看到diff本地分支和远程分支之间 git diff
  • 从 master 分支部署特定功能

    假设我们使用两个分支进行开发 staging and master 在迭代期间 所有团队成员所做的所有更改都会定期合并到staging分支并出现在我们的暂存环境中 客户能够查看更改并提供反馈 在迭代结束时我们合并staging分支到mast
  • git pull:无法快进,

    你能帮我解决我的问题吗 当我尝试从 dev 分支拉取时发生错误 我浏览了解决方案 它说我需要 rebase 但它对我来说没有成功 CT aohc MP1GYWQA MINGW64 c TCO source RAPMD Web Fronten
  • 尽管存在但未找到 Git https:// 存储库

    我在 github 上有一个私人仓库 它的位置被改变了 我尝试更换遥控器 但无法再按了 ls remote https github com xxxxx xxxxx git 给了我这个 远程 未找到存储库 致命 存储库 https gith
  • 将环境变量从 fastlane 传递到 Xcode 构建阶段脚本

    是否可以 如果可以 如何 将环境变量从运行 fastlane 的脚本传递到 Xcode 运行脚本阶段 我的最终目标是在运行脚本阶段读取当前的 git 分支名称 我们的 CI 由 Team Foundation Server 运行 它执行以下
  • 空提交的 Git 补丁

    我创建一个空提交 git commit allow empty m something important 有时它很有用 例如协调 2 个 或更多 不同的 git 树 然而 当我 git format patch 空提交被省略 因为它们不与
  • 在 $git push -u origin main 命令之后,Git bash 不请求任何身份验证,实际上什么也不做

    当我尝试将代码上传到 github 时 以下是我在 Git Bash 终端中执行的步骤 当我尝试使用将代码推送到 github 时 git push u origin main光标移动到下一行并持续闪烁 但不执行任何操作 git remot
  • 如何在git中定义ESC字符?

    我想在 git 输出中使用着色 例如 git log decorate color 当我发出这个命令时 我得到的输出看起来像ESC 1 32m where ESC是反色的 在我看来 这是一个有效的转义序列 除了 033必须发送而不是字符E
  • 从 svn 到 git,移动了主干

    我正在尝试将 svn 存储库切换到 git 这是一个旧的存储库 以前的维护者之一为每个新版本移动了主干 例如 以前的存储库位于 svn ssh svn mycompany com project release 1 trunk 现在 我们当
  • Git core.safecrlf 对具有相同行结尾的文件有不同的行为

    我有带有 VS 项目的 Windows 计算机 并且使用 Visual Studio 和 Cygwin 环境中的工具 包括 Git 有时 编辑后我会在文件中得到不同的行结尾 我想要简单的解决方案来检查文件的行尾一致性 然后再将其发送到存储库
  • git 列出所有可用命令

    有没有命令可以显示 GIT 中所有可用命令的列表 有git help但它显示 usage git version exec path
  • 如何在cygwin下更改git中文件的大小写?

    我们在区分大小写 不敏感的混合环境 cywgin linux 中工作 今天有人通过重命名文件 将 S 更改为 s 对我们的工作流程造成了小破坏 这导致了各种有趣的跨分支合并问题 而且说实话 没有人完全确定发生了什么 在 cygwin 的 g

随机推荐

  • 按字段名称对命名元组列表进行排序的 Pythonic 方法

    我想对命名元组列表进行排序 而不必记住字段名的索引 我的解决方案看起来相当尴尬 希望有人能有一个更优雅的解决方案 from operator import itemgetter from collections import namedtu
  • 在 Angular SPA 中设置 404 页面的最佳方法?

    我有一个在 Angular 上运行的应用程序 并且我已经有一个 http 拦截设置 我的问题是我的 api 返回了一些我想重定向到 404 页面的 404 错误 还有一些我不想重定向的错误 例如 当导航到新页面时 如果该页面的内容返回 40
  • 如何防止 CKEditor 将空格替换为?

    我面临一个问题CK编辑器4 http ckeditor com 我需要一个没有任何 html 实体的输出 所以我添加了config entities false 在我的配置中 但有些 nbsp 出现时 插入内联标签 前面的空格被替换为 nb
  • Kibana 5.5.1 位于 nginx 1.13 代理之后(dockerized)

    Goal 我想在 docker 容器中运行 elk 堆栈 能够通过 nginx 代理访问 ELK Stack 以绕过服务的各个端口 Kibana 服务 默认端口 5601 http
  • 什么时候需要使用 new 来初始化 F# 类型?

    给定一个类 例如 type MyClass member this Greet x printfn Hello s x 使用初始化实例是否合适 let x new MyClass 或没有new 另外 什么时候使用new构造函数比 a 更有用
  • 修改正在运行的可执行文件的资源内容

    All 我将应用程序设置存储在资源中 当我的程序首次加载时 我使用 WinAPI 读取指定的资源 然后我解析检索到的字节数据 这对我来说完美无缺 现在假设用户更改了我的应用程序中的设置 他 她检查复选框控件 我想将更新的设置保存到我的资源中
  • 如何在 apache poi 中找到包含图片的单元格

    我尝试在 xls 文档中循环图像 我写下一个代码 HSSFPatriarch patriarch sheet getDrawingPatriarch if patriarch null Loop through the objects fo
  • 在 Powershell 中远程启动进程,在 Windows 中获取 %ERRORLEVEL%

    一些背景知识 我试图在测试开始时远程启动和停止一些性能计数器 然后在测试结束时停止它们 我是通过 Win2003 机器上的自动化测试框架执行此操作的 测试框架执行命令时无需启动控制台 某些被测系统正在运行 Win2008 我编写了脚本来根据
  • PyPI 项目页面中的“Py 版本”是什么意思?这有关系吗?

    我注意到 大多数在 PyPI 上发布的项目在其项目页面中都包含 Py 版本 元数据 但它们的值各不相同 如果包不是通用包或不是纯 python 包 那么它们的值是不同的 这是可以理解的 以便表示它们的目标平台 例如鼻页 https pypi
  • IE 上具有最小宽度的内联跨度

    Hi我有 3 个SPAN那一定是inline并且有和一个min width 显然在 IE 上 SPAN不能有一个min width 我尝试使用DIV但当我把它放在inline the min width是忽略 CSS span displa
  • PDO 连接字符串:最好的方法是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我想使用 php pdo 制作一个后端应用程序 我发现了很多不同的方法来处理 PDO 连接字符串 我想知道使用 pdo 执行连接字符串的最佳方法
  • 为 SSRS 报表服务器中的所有报表启用缓存

    我在 SSRS 报表服务器中有超过 100 个报表 我需要为所有这些启用缓存 现在 我通过报表管理器为每个报表启用缓存 我们可以在任何报表服务器配置文件中添加缓存吗 这样我们就可以在一个地方启用所有报告的缓存 任何帮助将不胜感激 谢谢 阿杰
  • 平移、缩放或旋转的子视图消失

    我有一个ViewGroup我向其中添加子视图 如下所示 mViewGroup addView view new LayoutParams LayoutParams WRAP CONTENT LayoutParams WRAP CONTENT
  • 为什么我的 CAOpenGLLayer 更新速度比之前的 NSOpenGLView 慢?

    我有一个在 Mac OS X 上渲染 OpenGL 内容的应用程序 最初它渲染到 NSOpenGLView 然后我将其更改为渲染到 CAOpenGLLayer 子类 当我这样做时 我看到了巨大的性能损失 帧速率减半 鼠标响应能力降低 卡顿
  • 将 S3 静态站点与应用程序负载均衡器结合使用

    我有一个 ALB 当前将流量路由到多个 url 如果我们需要执行维护 我希望能够将流量路由到静态 S3 站点 然后 我们将显示静态 维护 页面而不是登录页面 我创建了一个 CloudFront 发行版 允许 S3 站点加载 SSL 证书 但
  • 使用 Android 2.x 进行实时音频流传输

    我需要在 2 x 及更高版本的设备上播放直播 This http developer android com guide appendix media formats html声明不可能在 Android 2 x 的设备上播放直播 我在这里
  • 如何更改 Vuetify 日历日期格式

    我正在尝试在以下 Vuetify 日历上启用输入事件 https github com vuetifyjs vuetify blob master packages docs src examples calendars complex e
  • 使用 greenDao 动态查询

    我需要验证一些条件来创建完整的查询 QueryBuilder qb getMyObjDao queryBuilder if 某些条件 qb where MyObjDao Properties Prop1 eq someValue elseq
  • 查找使用 AppleScript 安装的 Mac OSX 版本

    如何使用 AppleScript 查找我的 Mac 上安装的 OSX 版本 我想以编程方式安装应用程序并根据版本运行不同的 pkg 文件 Thanks 以下是如何使用内置函数在 AppleScript 中获取 OSX 版本 set sysi
  • Git 存储库损坏(标头检查不正确;松散对象已损坏)

    昨天晚上我在写提交消息时遇到了电源故障 当我重新启动机器时 我无法完成提交 我跑了git reset 添加回更改的文件 然后再次尝试 得到 git commit error inflate data stream error incorre