21

検索および置換コマンドの実行中に、私の git リポジトリが破損しました (こちらを参照してください:検索および置換後に Git リセットが失敗する)。そのため、到達できないとgitから言われたいくつかのパックファイルを削除しました。そこで、rm ./.git/index, git reset を実行しました。git commit を実行すると、次のメッセージが表示されました。

fatal: corrupt tree sha $someSHA

最後に git fsck を実行すると、作業ディレクトリがクリーンになり、コミットできました。現在の pb は、git checkout some_other_branch を実行すると、このメッセージが表示されたことです。

fatal: unable to read tree $someSHA

(表示される $someSHA は同じです)。誰かが私を助けることができますか?

編集1:

git fsck --full を実行すると、一連のメッセージが表示されます

error: refs/remotes/repo0/master does not point to a valid object!
error: refs/remotes/repo1/new-version does not point to a valid object!
...

その後、一連の

broken link from    tree d935b909f76ea92728d71038d0a67384353e65e1
              to    blob 05b97658ebd47fee25b76d80ac76cbd07d77961d
...

そして、いくつかの欠落したブロブ...

編集2:

git log --raw --all --full-history -- subdir/my-file を実行したところ、

error: refs/remotes/repo0/master does not point to a valid object!
error: refs/remotes/repo1/new-version does not point to a valid object!
...
error: Could not read 9096eb9d9dcbdf15a04e0a7c78a3744936f82ac7
fatal: cannot simplify commit 8dfd8e3d5b698dc979300d93d8e89a757abf6ec6 (because of 9096eb9d9dcbdf15a04e0a7c78a3744936f82ac7)

編集3:

私は走っgit fsck --fullたので、たくさんの行が表示されます

error: packfile .git/objects/pack/pack-fbfd8042e1e96bf5ffff88f9b5a230b8f5e4d4c4.pack does not match index
fatal: packfile .git/objects/pack/pack-fbfd8042e1e96bf5ffff88f9b5a230b8f5e4d4c4.pack cannot be accessed
...

別のブランチに実行git checkoutすると、次のように多数のメッセージが表示されました。

error: packfile .git/objects/pack/pack-3e7a0c040a5e3d1c21b91256d583424d82a59706.pack does not match index
warning: packfile .git/objects/pack/pack-3e7a0c040a5e3d1c21b91256d583424d82a59706.pack cannot be accessed
....
fatal: unable to read tree 2ad71d368b65eff0b6fec1ef72c6fdde6e80edad

編集4:

提案された回答に従って、ファイルを解凍し、チェックアウトすると、次のような行がいくつかありました。

error: packfile .git/objects/pack/pack-fbfd8042e1e96bf5ffff88f9b5a230b8f5e4d4c4.pack does not match index
warning: packfile .git/objects/pack/pack-fbfd8042e1e96bf5ffff88f9b5a230b8f5e4d4c4.pack cannot be accesse....

そして、で始まる一連の行

 error: Your local changes to the following files would be overwritten by checkout:
.idea_local_work/.name
.idea_local_work/libraries/sass_stdlib.xml
.idea_local_work/scopes/scope_settings.xml
... and then aborting
4

2 に答える 2

38

.gitまず、このプロセスでさらに破損した場合に備えて、ディレクトリのバックアップを作成します。それで:

  • 利用可能な最適なバージョンのパックファイルを元に戻します。
  • 破損したパックファイルごとに、次を実行します。

    mv .git/objects/pack/pack-**yourpack**.pack oldpack
    git unpack-objects -r < oldpack
    
  • 実行git fsck --fullgit checkoutて、出力を返します。

  • チェックアウトできるようになりましたがgit checkout -f **yourbranch**、作業ディレクトリにまだコミットされていない変更があるため、実行する必要があります。ただし、これらの変更は を実行すると失われますgit checkout -f

于 2013-01-28T21:00:27.057 に答える
-1

このファイルを、このリポジトリの別の .git コピーからの同じファイルで書き換えます。

于 2020-10-22T21:22:57.130 に答える