如何用git fsck修复resolve-undo中的无效sha1指针错误?
Git仓库
git gc报错的修复方案 执行git gc时出现以下致命错误:
Enumerating objects: 2382, done. Counting objects: 100% (2382/2382), done. Delta compression using up to 8 threads Compressing objects: 100% (747/747), done. fatal: unable to read <object-id> fatal: failed to run repack
执行git fsck --full --no-dangling后得到详细问题信息:
Checking object directories: 100% (256/256), done. Checking objects: 100% (2381/2381), done. error: <object-id>: invalid sha1 pointer in resolve-undo Verifying commits in commit graph: 100% (287/287), done.
该问题源于Git 2.38之前的Bug:索引中的resolve-undo信息未被GC保护,此Bug在Git 2.38(2022年第三季度)已修复。以下是修复当前仓库状态的步骤:
升级Git版本
先将Git升级到2.38或更高版本,避免后续再次触发同类问题。使用git --version查看当前版本,根据系统类型(Windows/macOS/Linux)通过官方渠道或包管理器完成升级。清理无效的resolve-undo信息
问题根源在于索引中存在无效的resolve-undo数据,执行以下命令重置索引即可清除这些数据,且不会影响工作区文件:git reset重新执行垃圾回收
完成上述操作后,再次运行垃圾回收命令:git gc此时应能正常完成仓库的垃圾回收流程,不会再出现之前的致命错误。
可选验证步骤
若要确认问题已解决,可再次执行:git fsck --full --no-dangling命令执行后无报错,说明仓库状态已恢复正常。
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

