git commit停止工作 - 构建树时出错

时间:2013-01-21 22:25:09

标签: git

我不能做出改变:

$ git commit
error: invalid object 100644 13da9eeff5a9150cf2135aaed4d2e337f97b8114 for 'spec/routing/splits_routing_spec.rb'
error: Error building trees

我到目前为止尝试过:

$ git fsck | grep 13da
missing blob 13da9eeff5a9150cf2135aaed4d2e337f97b8114

还有:

$ git prune
error: Could not read 1394dce6fd1ad15a70b2f2623509082007dc5b6c
fatal: bad tree object 1394dce6fd1ad15a70b2f2623509082007dc5b6c

还有:

$ git fsck | grep 13da
missing blob 13da9eeff5a9150cf2135aaed4d2e337f97b8114

但没有任何帮助。我应该删除文件,提交并重新引入吗?如果它带回git,我愿意失去一点历史。

12 个答案:

答案 0 :(得分:78)

此错误表示您有一个散列为13da9eeff5a9150cf2135aaed4d2e337f97b8114的文件,此散列不在.git/objects/../中,或者为空。发生此错误时,我在错误中只有这个哈希,没有文件路径。然后我尝试git gc --autogit reset --hard。在其中一个命令(这些命令没有解决我的问题)之后,我得到了触发错误的文件的路径。

您只需要生成对象哈希:

git hash-object -w spec/routing/splits_routing_spec.rb

有关详细信息,请参阅documentation。在文档中,还有一种修复此错误的方法。

P.S。 这是唯一对我有帮助的方式。

答案 1 :(得分:16)

您的git存储库中可能有一个损坏的对象。

如果您拥有此存储库的远程克隆或其他克隆,您可以从那里获取有问题的文件,并将其替换为您的本地存储库。

您想要的文件位于:

/repo/.git/objects/13/da9eeff5a9150cf2135aaed4d2e337f97b8114

答案 2 :(得分:13)

git reset --hard应该使您的存储库恢复正常,但您将失去未提交的更改。

答案 3 :(得分:8)

如果您的更改添加了有问题的文件,您只需将其从索引中删除并再次添加:

git reset <file> 
git add <file>

答案 4 :(得分:5)

对我而言,这只是权限问题。当我使用&#39; sudo&#39;时,它有效。也许与mac environmnet

有关

答案 5 :(得分:2)

这可能是由某些第三方同步APP引起的,例如Dropbox和Jianguoyun。根据我的经验,可能有两种方式:

  1. 您可以尝试撤消最近的同步操作。
  2. 从文件夹中删除相关文件,提交,然后移回文件。

答案 6 :(得分:1)

Easy work around solution, if you're not really concerned on the track of the file, you can duplicate the file and remove the original, commit first the deletion and addition, then rename to original again.

Git should build back again normally

答案 7 :(得分:1)

对于我来说,我是通过以下方式解决的:

git reset --mixed

答案 8 :(得分:0)

就我而言,远程分支中的文件已损坏。 我解决了它:

  1. 根据$ git remote rm origin
  2. 删除远程分支
  3. 再次添加遥控器:$ git remote add origin <the-remote-url>
  4. 再次获取遥控器:$ git fetch origin
  5. 在原点上重置为所需的分支(例如,develop):$ git reset --hard origin/develop
  6. 然后一切都恢复正常。

答案 9 :(得分:0)

在我的情况下,这是由于git版本不同。我一直通过git的官方Windows端口使用我的存储库,并开始使用具有相同版本号的MinGW端口。

当尝试使用MinGW git时,我开始遇到此问题。切换回Windows Git解决了该问题。

答案 10 :(得分:0)

git hash-object -w spec/routing/splits_routing_spec.rb

有了这个,git将为文件创建一个Sha1。

答案 11 :(得分:0)

它就像从远程仓库克隆到一个新文件夹一样简单,删除这个新文件夹中的所有文件,保留 .git 一个。然后将旧文件夹中的所有文件复制到新的克隆文件夹中,而不复制 .git 文件夹..