Git gc显示错误"无法读取提交"

时间:2015-05-20 17:00:51

标签: git

我的git存储库存在问题。 Git gui总是弹出松散的对象警告,当我让它压缩它时,下次git gui启动时会出现弹出窗口。我已尝试在控制台中执行git gui,这是输出:

$ git gc
error: Could not read 89acec6cd486753b5bbbcf6239f4cf39ab20c6a8
error: Could not read 4f0ce06bd472abcef5eef1ac9a780f2b2fb7d56f
error: Could not read 44e02cd1a9e12b9e6a2ad0b1f6dc062d1d25faac
error: Could not read e503215228feca3e4243e94b07c0714edc5b48ff
error: Could not read 4620c2776e1de834a5d5a56d711ff9b2e27699b7
Counting objects: 189655, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (38260/38260), done.
Writing objects: 100% (189655/189655), done.
Total 189655 (delta 142194), reused 189655 (delta 142194)
error: Could not read 89acec6cd486753b5bbbcf6239f4cf39ab20c6a8
error: Could not read 4f0ce06bd472abcef5eef1ac9a780f2b2fb7d56f
error: Could not read 44e02cd1a9e12b9e6a2ad0b1f6dc062d1d25faac
error: Could not read e503215228feca3e4243e94b07c0714edc5b48ff
error: Could not read 4620c2776e1de834a5d5a56d711ff9b2e27699b7
Checking connectivity: 199676, done.

如何解决这个问题?

git show 89acec6cd486753b5bbbcf6239f4cf39ab20c6a8会导致fatal: bad object 89acec6cd486753b5bbbcf6239f4cf39ab20c6a8git fsck --full有很多悬空提交。

我正在使用git v2.4.1

感谢您的所有答案!

编辑:我重新克隆了我的存储库并将.git文件夹复制到我的树中,现在一切正常。

1 个答案:

答案 0 :(得分:0)

在您尝试以下任何内容之前,请对项目中的所有内容进行完整备份。

由于只有五个损坏的git对象,我想它们都被添加到一个git add中。如果是这种情况,您可以尝试搜索指向具有这些对象的树的提交。如果它们在单个提交中,则可以手动删除该提交并将分支头重置为最后一个可行的提交(如果损坏属于任何分支)。

如果损坏的提交属于任何分支,则删除它将导致丢失最新的git历史记录。但是您可以使用备份代码至少恢复工作树中的内容。

UPD: 啊,对不起没有抓到悬挂的提交。所以历史严重受损。实际上,只有5个物体被打破。这些可能是一些长期未更改的文件或文件夹,因为它们存在于许多提交中。如果那些git-objects的文件和文件夹仍然存在(并给出相同的SHA),该怎么办?

  1. 将所有非git文件复制到另一个文件夹中。
  2. git init; git add --all; git commit -m'message'
  3. 查看具有破坏的SHA的对象。对于每一个发现用新创建的替换破碎。