我在本地和远程都迁移了一个存储库,现在由于错误的树对象,我无法推送(或做很多事情),
> git push
error: Could not read 4218a5a380d8b6cbc7f461c22cb48ed66a92c850
fatal: bad tree object 4218a5a380d8b6cbc7f461c22cb48ed66a92c850
fatal: The remote end hung up unexpectedly
4218a5a380d8b6cbc7f461c22cb48ed66a92c850
在我的文件系统上不存在,
> dir 4218a5a380d8b6cbc7f461c22cb48ed66a92c850 /s /p
Volume in drive C is OS
Volume Serial Number is xxxxxxxx
File Not Found
我有我所有的源代码文件。我现在唯一的选择是核对 git 存储库并重新开始历史吗?
最佳答案
“核爆和铺路”选项不一定是您的唯一选项,但它可能是您的最佳选项。 “错误的树对象”是一个不寻常的错误,表明您的存储库的某些部分可能已损坏(由于磁盘故障,或流氓进程/恶意软件/任何覆盖您的文件,或试图将 Git 存储库存储在保管箱文件夹中,或谁知道什么)。不过,如果您要对它进行核攻击,您可能需要先备份它以防万一。
如果你正在做一个没有选项的 git push
,这表明你有一个存储库的单独副本(可能有点过时),其中大部分代码可能在不同的机器上。其他地方的单独副本可能仍然不错。您可以通过将其克隆到一个新位置来检查这一点,然后使用您可以从损坏的存储库中挽救的任何内容所做的新提交更新新的克隆,然后推送这些新提交,以便将新提交添加到该存储库上的另一个存储库其他机器。然后你真的可以很舒服地使用 nuke-and-pave 因为你有两个好的副本:一个在你的新克隆中(这个场景中的第三个 Git),另一个在另一台机器上(这里是第二个 Git - 第一个 Git 是你的损坏的存储库)。
首先对存储库损坏的原因进行一些背景调查也是值得的,因为这种情况可能仍在继续。
顺便说一句,即使树对象 4218a5a380d8b6cbc7f461c22cb48ed66a92c850
作为松散对象存在,它也不会位于名为 4218a5a380d8b6cbc7f461c22cb48ed66a92c850
的文件中。它将位于名为 42
的目录中,存储为名为 18a5a380d8b6cbc7f461c22cb48ed66a92c850
的文件。
如果对象被打包,它根本不会作为单独的文件存在,而是作为某个打包文件(其名称不可预测)中的打包对象存在。
关于git - 从坏树对象中恢复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48758490/