Git で孤立したコミットを参照する 質問する

Git で孤立したコミットを参照する 質問する

私の git リポジトリがどういうわけかおかしくなりました。今朝 msysgit をロードしたところ、現在のディレクトリの後にブランチ名が表示される代わりに、「((ref: re...))」と表示され、「git status」ではすべてが新しいファイルとして報告され、「git log」と「git reflog」では「fatal: bad default revision 'HEAD'」などと表示されます。

「git reflog --all」または「gitk --all」を実行すると、リポジトリの残りの部分はそのままであることが示されますが、作業していたブランチが消えてしまったように見えます。これが、HEAD が存在しない/何も指していないように見える理由です。

Git があらゆる種類の情報をまとめて保持していることは知っていますが、コミットが何らかの理由で孤立しているだけだと思います。それらのコミットを表示して HEAD をリセットできるコマンドはありますか?

編集: ああ、大変。「git fsck」を発見しましたが、「git fsck --full」で「fatal: object 03ca4... is corrupted」と報告されています。これについて、一体どうしたらいいのでしょうか?

編集: ああ、大変。別のブランチをチェックアウトし、'git checkout -b lostbranchname' を使用して同じ名前の元のブランチを再作成しようとしたところ、git は「エラー: 参照 refs/heads/lostbranchname を解決できません: エラーなし、致命的: 更新のために参照をロックできませんでした: エラーなし」と表示しました。'エラーなし' は特に厄介なエラーのはずです。つまり、まだ残っているようですが、使用できず、削除もできません。

編集: 大変だ、大変だ。ここで提案されているように、開梱、再梱包、交換を何度も行いました:ハードディスク障害によって破損した Git オブジェクトを回復するにはどうすればよいですか?、しかし今度は、「git status」のような無害なもので、別のハッシュが破損していると報告されています。すべてが台無しになっていると思います。Git は素晴らしいものですが、このような問題に対処する必要はありません。

ベストアンサー1

これを未解決のままにしておくよりも、自分の質問に自分で答えようと思います。 を使用すると、git reflog --all孤立したコミットを参照するのに便利です。また、そこから SHA1 ハッシュを使用して履歴を再構築できます。

ただし、私の場合はリポジトリが破損していたため、これは役に立ちませんでした。git fsckただし、リポジトリ自体のエラーを見つけて修正するのに役立つ場合があります。

おすすめ記事