如何修复一个坏的git树对象

Flu*_*ear 17 git version-control repository

我有一个存储库的本地副本,该存储库不再具有与之关联的任何远程数据库.我试图将这个repo推送到一个新的遥控器,但每次我得到这个消息:

error: Could not read 9eefe9305253b2c039a54cbc8aa22f7f8e6e8790
fatal: bad tree object 9eefe9305253b2c039a54cbc8aa22f7f8e6e8790
Run Code Online (Sandbox Code Playgroud)

我在这里读到类似的问题,解决这个问题的一种方法是从存储库的其他副本中检索此对象或进行硬重置.我不能做任何两个,因为我没有这个回购的另一个副本.

有没有办法简单地删除这个提交或其他类型的解决方案,这将允许我将回购推送到新的远程保持历史记录?

hau*_*nja 9

我遇到了这个,我真的不想删除我的.git并重新开始。我在互联网上找到的其他建议没有帮助我(包括一些相当复杂的.git手术尝试)。

为我解决这个问题的事情是运行:

git fetch --refetch
git gc --aggressive
Run Code Online (Sandbox Code Playgroud)

您可以通过以下方式确认修复:

git fsck
Run Code Online (Sandbox Code Playgroud)


Ank*_*ain 7

只需退出访问 git 的应用程序并重新启动即可。为我工作 xcode-iOS。


Max*_*ske 5

要实际解决问题而不丢失任何数据(假设该树是唯一丢失的对象,我对此表示怀疑)您可以尝试以下操作:

  1. 使用相关树检出提交的父提交
  2. 尝试使用有问题的提交的名称git cat-file -p以查看提交消息的内容(希望它会告诉您发生了什么变化)
  3. 现在您可能能够确定所做的更改,并且可以从中推断出目录结构。
  4. 如果 3 有效,那么您可以使用文本编辑器和 zlib 压缩器手动创建树。tee 文件中的条目将是其他树对象或 blob。希望大多数文件和文件夹在两次提交之间共享(没有更改)。这将允许您重用检出提交的树对象中的大部分条目。


axs*_*uul 0

我遇到了这个问题。重新启动我的计算机实际上修复了它,所以请在执行其他操作之前先尝试一下。或者也许我只是运气好但值得一试!