87

変更をコミットできません:

$ 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 commit が復活するのであれば、履歴を少しでも失うことを厭わない。

4

13 に答える 13

144

このエラーは、ハッシュ を持つファイルが13da9eeff5a9150cf2135aaed4d2e337f97b8114あり、このハッシュが に存在しない.git/objects/../か、空であることを意味します。このエラーが発生したとき、ファイルパスなしで、このハッシュのみがエラーに含まれていました。それから私はやろうとしgit gc --autoましgit reset --hardた。これらのコマンドの 1 つ (これらのコマンドは私の問題を解決しませんでした) の後、エラーをトリガーするファイルのパスを取得しました。

オブジェクト ハッシュを生成するだけです。

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

詳細については、ドキュメントを参照してください。ドキュメントには、このエラーを修復する追加の方法があります。

PSこれが私にとって役に立った唯一の方法でした。

于 2016-07-27T04:46:12.090 に答える
21

Git リポジトリに破損したオブジェクトがある可能性があります。

このリポジトリのリモートまたは他のクローンがある場合は、そこから問題のあるファイルを取得して、ローカル リポジトリで置き換えることができます。

必要なファイルは次の場所にあります。

/repo/.git/objects/13/da9eeff5a9150cf2135aaed4d2e337f97b8114
于 2013-01-22T07:40:10.623 に答える
13

git reset --hardリポジトリを通常に戻す必要がありますが、コミットされていない変更は失われます。

于 2013-01-21T22:27:30.763 に答える
5

私の場合、次の方法で解決しました。

git reset --mixed
于 2018-10-01T09:12:51.680 に答える
3

これは、Dropbox や Jianguoyun などのサードパーティの同期アプリが原因である可能性があります。私の経験に基づいて2つの方法があるかもしれません:

  1. 最近の同期操作を取り消すことができます。
  2. 関連ファイルをフォルダーから削除し、コミットしてから、ファイルを元に戻します。
于 2017-10-19T10:20:59.993 に答える
2

ファイルの追跡にあまり関心がない場合は、ファイルを複製して元のファイルを削除し、最初に削除と追加をコミットしてから、元の名前に再度名前を変更することができます。

Git は正常に再構築する必要があります

于 2016-04-07T10:33:12.623 に答える
0

私の場合、壊れているのはリモートブランチのファイルです。私はそれを解決しました:

  1. リモートブランチを完全に削除します$ git remote rm origin
  2. リモートを再度追加します。$ git remote add origin <the-remote-url>
  3. リモートを再度フェッチします。$ git fetch origin
  4. オリジンの目的のブランチにハードリセットします(たとえば、develop):$ git reset --hard origin/develop

その後、すべてが正常に戻ります。

于 2015-12-16T07:41:09.967 に答える
0

リモートリポジトリから新しいフォルダーにクローンを作成し、この新しいフォルダーのすべてのファイルを削除して、.git を保持するのと同じくらい簡単です。そして、.gitフォルダーをコピーせずに、すべてのファイルを古いフォルダーから新しいクローンフォルダーにコピーします..

于 2021-06-25T15:27:56.950 に答える