我在我的git仓库中遇到这个错误:
22:09:15 $ git status
# On branch master
error: Could not read 8124cc15c63be92d534e4cdfa33c38d54deee122
error: unable to read tree object HEAD
nothing to commit (working directory clean)
谷歌搜索error: unable to read tree object HEAD
并没有得到很大的帮助,这个错误似乎是非常罕见的。我不知道如何处理它。可能是硬盘驱动器故障?
编辑:git fsck
的输出如下:
broken link from commit 607328dc80e4901a55b95c683d4fbf43e6df28bf
to tree 8124cc15c63be92d534e4cdfa33c38d54deee122
missing tree 8124cc15c63be92d534e4cdfa33c38d54deee122
dangling tree 56b5d4a5e429d251582ec927bca7ef1225510c41
dangling tree 0259d2d38b18b6136bb6070fb41faf3624453cc6
9条答案
按热度按时间roejwanj1#
对于"链接断开"的消息,您可以遵循GitFaq的建议:
man git-unpack-objects
",特别是"-r
"标志。另外,请注意它只解压缩那些还没有可用的对象,所以您需要先将pack-file从它的正常位置移开(否则
git-unpack-objects
会在pack-file本身中找到pack-file中的所有对象,而不会解压缩任何对象)有时候(希望经常如此!)您可以在存储库的其他副本中找到丢失的对象。
在其他时候,您可能需要尝试以其他方式查找数据(例如,您的检出副本可能包含散列后将成为丢失对象的文件内容?)
git fsck --full
"时一切正常注:
(2012年2月更新:those plugins已经走过了很长的路,现在相当稳定)
2016年7月更新(7年后),随着Git 2.10即将发布,您现在拥有:
它有助于 * 命名 * 这些断开链接的起源
更多信息请参见"How to fix git error broken link from tree to tree?"。
s8vozzvw2#
我刚刚遇到了类似的问题。当我的笔记本电脑在
git pull
期间硬关机时,出现了损坏。我有一个远程备份仓库。首先,我在.git/objects/??/* 中有几个大小为零的对象文件。在对仓库进行cp -a
备份后,我这样做:../fresh/
存储库中cat ../fresh/.git/objects/pack/pack-*.pack | git unpack-objects
这填补了对象数据库中缺少的对象。存储库现在似乎已备份。
rjee0c153#
我也遇到过同样的问题,经过反复推敲,我发现这是因为仓库git文件的权限被修改了,我已经解决了这个问题,具体如下:
成交!
dz6r00yl4#
我在Homebrew安装的Git仓库中遇到了类似的错误,我发现删除
.git
目录并通过从Homebrew’s public repository重新克隆来重新创建它比逐个恢复所有丢失的对象更容易。git remote -v
的输出,其中包含远程控制器的名称和URL,以便以后可以手动将它们添加回去。.git
目录(或将其重命名为.git-broken
,稍后再删除)。在命令行中,这是rm -rf .git
。git clone https://github.com/Homebrew/homebrew.git
或其他URI重新克隆远程目录。homebrew
,您只需要其中的.git
目录;你的本地文件已经好了。所以mv homebrew/.git .git
,然后删除homebrew
文件夹。git remote add <name> <url>
再次添加它们。git reset HEAD^
回滚“[WIP]”提交,并使用git stash save <custom-message>
将工作目录再次保存到一个stash中,从而将stash分支转换回stash。如果运行
git fsck
,应该不会看到任何错误:git stash list
、git branch
和git remote -v
应显示与之前相同的输出。sq1bmfud5#
如果没有未提交的更改,最简单的解决方案是删除本地分支:git分支-D [分支名称]
然后再次 checkout 远程分支:git checkout -B [分支名称]来源/[分支名称]
iszxjhcz6#
我通过在同一目录/项目文件夹中进行更改修复了错误,然后尝试提交新的更改,发生的情况是我收到了错误消息“无效对象100644 e38 e910 ceb 18 b 09 f436 f353 c3 a131 bfe 2caba 130 for”Book/alise_mathe/app/src/main/res/menu/drawermenu.xml“此消息解决了问题,我只是通过将文件名更改为“drawer_menu.xml "重构了drawermenu.xml。添加了提交推送的更改,仅此而已。(Android工作室)
我希望这能有所帮助
e1xvtsh37#
我通过从我的远程服务器目录中删除Capistrano的“repo”文件夹修复了这个错误。我检查了许多其他建议的问题,并解决了这个问题,这并不是我的本地项目的问题。这个问题似乎发生在Capistrano执行从repo到远程的拉取操作时。对我来说,这可能是由于一个暂停的部署留下了损坏的对象/对象引用。2我的主机也刚刚完成了一个服务器迁移,可能在这个过程中有什么东西损坏了。
yacmzcpb8#
如果以上步骤都不起作用,并且您希望保留本地更改,并且有一个灵活的远程存储库,那么this reset script会产生很好的效果。
如果您还需要保留您的收藏,请手动复制以下文件:
x8goxv8g9#
我通过移除遥控器并重新添加来解决此问题。
我曾经使用过
git fsck --name-objects
,它显示多个分支损坏。删除这些分支的本地和远程副本并没有解决这个问题。然而,解决它的是:
git remote remove origin
然后:
git origin add origin <my-origin>
在我做了那件事之后,一切都恢复了正常。