我有一个事务中断,当我再次尝试时,我遇到了空的或损坏的对象的错误,继另一个问题后我删除了所有空文件,当我运行时
git fsck --full
Run Code Online (Sandbox Code Playgroud)
我收到了这个错误
Checking object directories: 100% (256/256), done.
Checking objects: 100% (48774/48774), done.
error: d193ccbc48a30e8961e9a2515a708e228d5ea16d: invalid sha1 pointer in cache-tree
error: df084ac4214f1a981481b40080428950865a6b31: invalid sha1 pointer in cache-tree
broken link from tree 4bf4869299b294be9dee4ecdcb45d2c204ce623b
to tree df084ac4214f1a981481b40080428950865a6b31
broken link from tree 4bf4869299b294be9dee4ecdcb45d2c204ce623b
to tree d193ccbc48a30e8961e9a2515a708e228d5ea16d
missing tree df084ac4214f1a981481b40080428950865a6b31
missing blob a632281618ca6895282031732d28397c18038e35
missing tree d193ccbc48a30e8961e9a2515a708e228d5ea16d
missing blob 70aa143b05d1d7560e22f61fb737a1cab4ff74c6
missing blob c21c0545e08f5cac86ce4dde103708a1642f23fb
missing blob 9f341b8a9fcd26af3c44337ee121e2d6f6814088
missing blob 396aaf36f602018f88ce985df85e73a71dea6f14
missing blob 87b9d1933d37cc9eb7618c7984439e3c2e685a11
Run Code Online (Sandbox Code Playgroud)
并且知道我不知道如何解决这个问题.
使用Git 2.10(2016年第3季度),您可以更多地了解这些断开链接的来源.
git fsck --name-objects
Run Code Online (Sandbox Code Playgroud)
见提交90cf590,提交1cd772c,提交7b35efd,提交993a21b(2016年7月17日)由约翰Schindelin( )dscho.
(由Junio C gitsterHamano合并- -在提交9db3979,2016年7月25日)
fsck:可选择显示更多有用信息的断开链接当报告提交/树/ blob之间的断开链接时,如果告诉用户该对象应该如何可达,那么这将是非常有用的.
使用新
--name-objects选项,git-fsck将尝试完全执行此操作:
以显示它们如何可访问的方式命名对象.例如,当某些reflog被破坏并且缺少不应该的blob时,用户可能想要删除相应的reflog条目.
此选项可帮助他们找到该条目:git fsck --name-objects现在将报告以下内容:
broken link from tree b5eb6ff... (refs/stash@{<date>}~37:)
to blob ec5cf80...
Run Code Online (Sandbox Code Playgroud)
如果那些断开的链接不是来自本地存储而是来自远程仓库,那么获取这些包对象就可以解决这种情况.
另请参阅" 如何恢复因硬盘故障而损坏的Git对象? ".
对我修复此“损坏的链接”错误有用的是此处列出的sehe 的答案,以回应有关如何修复无法找到 <在此处插入 sha1 代码> 错误的问题。
就像 Adam 所说,从另一个存储库/克隆恢复对象。
在“完整”Git 数据库上:
Run Code Online (Sandbox Code Playgroud)git cat-file -p a47058d09b4ca436d65609758a9dba52235a75bd > tempfile在接收端:
Run Code Online (Sandbox Code Playgroud)git hash-object -w tempfile
一个重要的补充是,在步骤 1 和步骤 2 之间,将文件从一个位置直接传输到另一个位置非常重要。根据我的经验,使用 Git 推拉来移动临时文件是行不通的。
我有一个非常类似的问题;这导致了一些 git 命令的broken link from tree错误。fatal: bad tree object
但通过运行以下命令修复了它:
git stash clear([可选]只是删除可能由于变基或其他原因而损坏的存储)git reflog expire --expire-unreachable=now --all(删除悬空提交)git gc --prune=now(类似的还有修剪提交)git fsck --full --name-objects(检查完整性,并且不应返回悬空提交或坏树)之后错误消息fatal: bad tree object就消失了!:田田: