昨日の夜、コミットメッセージを書いているときに電源障害が発生しました。マシンを再起動したとき、コミットを完了できませんでした。私は実行しgit reset
、変更されたファイルを追加して再試行し、これを取得しました:
% git commit
error: inflate: data stream error (incorrect header check)
error: unable to unpack a94406345ac44982b00cf57b4b9660a35436637f header
fatal: a94406345ac44982b00cf57b4b9660a35436637f is not a valid object
git fsck
以下を明らかにします:
% git fsck --full
Checking object directories: 100% (256/256), done.
error: inflate: data stream error (incorrect header check)
error: unable to unpack 4346883490a0990e68db0187241abc1642765a73 header
error: inflate: data stream error (incorrect header check)
fatal: loose object 4346883490a0990e68db0187241abc1642765a73 (stored in .git/objects/43/46883490a0990e68db0187241abc1642765a73) is corrupt
メッセージがさまざまなオブジェクトについて不平を言っていることに気づきました。
私はSOとWebを検索していくつかのことを試しましたが、役に立ちませんでした。
git stash
と同じメッセージが表示されgit commit
ます。他のすべてのgitコマンドは正常に動作するようです。何が問題なのかを確認して修正するにはどうすればよいですか?
編集: git log
提案どおりの出力(最初の数行のみ):
% git log --oneline --decorate --all |head -n 8
253b086 (HEAD, new_tokenize) Normalized tokenizer interface slightly
0f2425a (master) Added procs to eval layer
a4d4c22 Added procedures as a type
d1e15ad (tag: v0.10) Added `if' form with tail call semantics
f94a992 (tag: v0.9) Completed environments
031116e Fixed bug where # on a line by itself caused segfault
3d8b09f Added environments, define and set!
01cc624 Put symbol table implementation into types.c
これは小さな個人プロジェクトです。私は通常(マスター)で作業しますが、当時(new_tokenize)で実験を行っていました。253b086は、停電前の最後の正常なコミットでした。
gitは新しいコミット用に.git / objectsにファイルを作成したようですが、それらに正常に書き込むことができませんでした。一度に1つずつ削除し、再実行git fsck --full
して次のものを見つけることで解決しました。私が最初に報告したものから始めましたgit fsck
:
% rm -f .git/objects/43/46883490a0990e68db0187241abc1642765a73
% git fsck --full
Checking object directories: 100% (256/256), done.
error: inflate: data stream error (incorrect header check)
error: unable to unpack 86e7247af5865e857a3b61eed99986e2d9538df1 header
error: inflate: data stream error (incorrect header check)
fatal: loose object 86e7247af5865e857a3b61eed99986e2d9538df1 (stored in .git/objects/86/e7247af5865e857a3b61eed99986e2d9538df1) is corrupt
% rm -f .git/objects/86/e7247af5865e857a3b61eed99986e2d9538df1
% git fsck --full
Checking object directories: 100% (256/256), done.
error: inflate: data stream error (incorrect header check)
error: unable to unpack a94406345ac44982b00cf57b4b9660a35436637f header
error: inflate: data stream error (incorrect header check)
fatal: loose object a94406345ac44982b00cf57b4b9660a35436637f (stored in .git/objects/a9/4406345ac44982b00cf57b4b9660a35436637f) is corrupt
等々。git fsck
クリーンアップする前に5つのオブジェクトを削除しました。これは、私が作成しようとしているコミットの5つのファイルに(おそらく)対応しています。ファイルの履歴はまったく壊れていなかったと思います。
ちなみに、別の方法でもうまくいくように思いました。git clone
不良オブジェクトをコピーしますが、コピーしgit push
ません。バックアップした後、私は新しい空のリポジトリを作成し(そうしないとマスターにプッシュできないため--bare)、変更をステージング解除して両方のブランチを新しいリポジトリにプッシュしました。次に、それをもう一度チェックアウトし、バックアップから最新の変更を復元するだけでした。
誰かがここで失敗のメカニズムに光を当てる気にしているかどうかまだ興味があります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加