我在我的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
答案 0 :(得分:25)
在“已损坏的链接”消息中,您可以关注GitFaq recommendations:
- 备份你所有的状态,这样你做的任何事情都可以在你腐败的时候再做一次!
- 爆炸任何损坏的包文件
- 请参阅“
man git-unpack-objects
”,特别是“-r
”标志 另外,请注意它只解包尚不可用的对象,因此您需要先将包文件从其正常位置移开(否则git-unpack-objects
将找到包文件中的所有对象)包文件本身,而不是解压缩任何东西)- 替换任何损坏和/或丢失的物体
- 这是一个具有挑战性的部分 有时(希望经常!)您可以在存储库的其他副本中找到丢失的对象 在其他时候,您可能需要尝试以其他方式查找数据(例如,您的签出副本可能包含散列时将丢失的对象的文件内容?)。
- 确保所有内容都满意“
git fsck --full
”- 重新包装一切以重新回到有效状态
注意:
2016年7月更新(7年后续),Git 2.10即将发布,您现在拥有:
git fsck --name-objects
它有助于命名这些断开链接的来源
有关详情,请参阅“How to fix git error broken link from tree to tree?”。
答案 1 :(得分:16)
我刚才有类似的问题。当我的笔记本电脑在git pull
期间硬关机时,就会出现腐败现象。我有一个远程备份存储库。首先,我在.git / objects / ?? / *中有几个零大小的目标文件。在对存储库进行cp -a
备份后,我执行了此操作:
../fresh/
存储库在破碎的存储库中,我做了
cat ../fresh/.git/objects/pack/pack-*.pack | git unpack-objects
这填补了对象数据库中缺少的对象。存储库似乎现在已经备份。
答案 2 :(得分:4)
我遇到了同样的问题。经过大量的拔毛,我发现它是由更改了对存储库的git文件的权限造成的。我解决了它如下:
$ cd .git
$ chmod 755 *
完成!
答案 3 :(得分:2)
我的Homebrew安装的Git存储库中出现了类似的错误。我没有逐个恢复所有丢失的对象,而是简单地删除.git
目录并通过从Homebrew’s public repository重新克隆再次创建目录。这些是我的步骤:
git remote -v
的输出,其中包含遥控器的名称和网址,以便您稍后再手动添加。.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>
再次将工作目录保存到存储中,将存储分支转换回存储。如果您运行git fsck
,则应该看到没有错误:
$ git fsck
Checking object directories: 100% (256/256), done.
Checking objects: 100% (197135/197135), done.
Checking connectivity: 197162, done.
$
git stash list
,git branch
和git remote -v
应显示与之前相同的输出。
答案 4 :(得分:0)
如果您没有未经修改的更改,最简单的解决方案是删除本地分支: git branch -D [branch name]
然后再次结帐远程分支: git checkout -b [分支名称]来源/ [分支名称]
答案 5 :(得分:0)
我通过在同一个目录/项目文件夹中进行更改来修复错误,然后尝试提交新的更改,发生的事情是我收到错误消息msg'无效对象100644 e38e910bbbbbf436f353c3a131bfe2caba130 for'Book / alise_mathe / app / src / main /res/menu/drawermenu.xml” 这个msg解决了这个问题,我只是通过将文件名改为'drawer_menu.xml'来重构了drawermenu.xml。添加了推送的更改,这就是全部。 (机器人工作室)
我希望这会有所帮助
答案 6 :(得分:0)
我通过删除Capistrano&#39; repo&#39;来解决此错误。远程服务器目录中的文件夹。我经历了一些其他建议的问题,并解决了问题并不在于我的本地项目。当Capistrano执行从回购中拉到遥控器时,问题似乎发生了。对我来说,这可能是由于停止部署导致损坏的对象/对象引用。我的主机也刚刚完成了服务器迁移,也许在此过程中出现了一些损坏。
答案 7 :(得分:0)
如果以上步骤均不起作用,并且您要保留本地更改并保留了远程存储库,则this reset script会产生奇迹。
如果您还需要保留存储,请手动复制以下文件: