我在我的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)
Run Code Online (Sandbox Code Playgroud)
谷歌搜索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
Run Code Online (Sandbox Code Playgroud)
Von*_*onC 26
在"断开链接"消息上,您可以遵循GitFaq建议:
- 备份你所有的状态,这样你做的任何事情都可以在你腐败的时候再做一次!
- 爆炸任何损坏的包文件
- 见"
man git-unpack-objects
",特别是"-r
"标志.
另外,请注意它只解包尚未提供的对象,因此您需要先将pack-file从其正常位置移开(否则git-unpack-objects
将在pack-file本身中找到pack-file中的所有对象) ,根本没有解开任何东西)- 替换任何损坏和/或丢失的对象
- 这是具有挑战性的部分.
有时(希望经常!)您可以在存储库的其他副本中找到丢失的对象.
在其他时候,您可能需要尝试以其他方式查找数据(例如,您的签出副本可能包含散列时将丢失的对象的文件内容?).- 确保一切都满意"
git fsck --full
"- 重新包装一切以重新回到有效状态
笔记:
2016年7月更新(7年后续),即将发布Git 2.10,您现在拥有:
git fsck --name-objects
Run Code Online (Sandbox Code Playgroud)
它有助于命名那些断开链接的来源
有关更多信息,请参阅" 如何修复从树到树的git错误链接? ".
Til*_*gel 18
我刚才有类似的问题.当我的笔记本电脑在电脑中断电时发生了腐败git pull
.我有一个远程备份存储库.首先,我在.git/objects/??/*中有几个零大小的目标文件.一个后cp -a
库的备份,我这样做:
../fresh/
存储库中在破碎的存储库中,我做到了
cat ../fresh/.git/objects/pack/pack-*.pack | git unpack-objects
这填补了对象数据库中缺少的对象.存储库现在似乎已备份.
我有同样的问题。经过一番摸索,我发现这是由于对存储库的 git 文件的权限更改造成的。我已经解决了如下:
$ cd .git
$ chmod 755 *
Run Code Online (Sandbox Code Playgroud)
完毕!
我在Homebrew install\xe2\x80\x99s Git 存储库中遇到类似的错误。我发现,与一一恢复所有丢失的对象相比,只需删除该目录并通过从Homebrew\xe2\x80\x99s 公共存储库.git
重新克隆来重新创建它会更容易。这些是我的步骤:
git remote -v
,其中包含遥控器的名称和 URL,以便您稍后可以手动将它们添加回来。.git
目录(或将其重命名为.git-broken
并稍后删除)。在命令行上,这是rm -rf .git
.git clone https://github.com/Homebrew/homebrew.git
。homebrew
以存储库命名的新子文件夹。您只需要.git
其中的目录;你的本地文件已经没问题了。所以mv homebrew/.git .git
,然后删除该homebrew
文件夹。git remote add <name> <url>
。git reset HEAD^
工作目录再次保存到存储,将存储分支转换回存储git stash save <custom-message>
。如果运行git fsck
,您应该不会看到任何错误:
$ git fsck\nChecking object directories: 100% (256/256), done.\nChecking objects: 100% (197135/197135), done.\nChecking connectivity: 197162, done.\n$\n
Run Code Online (Sandbox Code Playgroud)\n并且git stash list
、git branch
、 和git remote -v
应显示与之前相同的输出。