[解決済み] Git で孤立したコミットをブラウズする
質問
今朝 msysgit をロードしたら、カレントディレクトリの後にブランチ名が表示される代わりに "((ref: re...))" と表示され、 'git status' はすべてを新しいファイルとして報告し、 'git log' と 'git reflog' は "fatal: bad default revision 'HEAD'" などと教えてくれて、その通りでした。
git reflog --all' や 'gitk --all' を実行すると、リポジトリの残りの部分は無傷であることがわかります。しかし、私が作業していたブランチは消えてしまったようで、HEAD が存在しない/何も指していないように見えるのはこのためです。
git があらゆる種類の情報を保持していることは知っていますし、私のコミットが何らかの形で孤児になってしまったのだと思います。ですから、それらのコミットを表示して HEAD をリセットできるようなコマンドはないでしょうか?
EDIT: なんということでしょう。git fsck」を見つけたのですが、「git fsck --full」は "fatal: object 03ca4... is corrupted" と報告しています。これはいったいどうしたらいいのでしょうか?
EDIT: やれやれです。別のブランチをチェックアウトして、同じ名前で元のブランチを 'git checkout -b lostbranchname' で再作成しようとしたら、git は "error: unable to resolve reference refs/heads/lostbranchname: No error, fatal: Failed to lock ref for update: No error" と言ってきました。エラーなし」というのは、特に厄介なエラーなのでしょう。というわけで、まだウロウロしているようですが、使うこともできず、殺すこともできない状態です。
EDIT: 超超超やばい。ここで提案されているように、いろいろと解凍したり、詰め替えたり、入れ替えたりしてみました。 ハードディスクの故障で壊れたGitオブジェクトを復元するには? しかし今度は、'git status' のような無害なものに対して、別のハッシュが破損していると報告されるようになったのです。全体がダメになったのだと思います。Gitは素晴らしいものですが、このようなことに対処する必要はないはずです。
どうすれば解決する?
このまま放置しておくよりは、私自身の疑問に対する答えを与えておこうと思います。使用方法
git reflog --all
を使用することは、孤立したコミットを閲覧する良い方法です。そして、そこからSHA1ハッシュを使用して、歴史を再構築することができます。
私の場合、リポジトリが破損していたので、これは役に立ちませんでしたが。
git fsck
は、リポジトリ自体のエラーを見つけたり、時には修正するのに役立ちます。
関連
-
[解決済み] Git で直近のローカルコミットを取り消すには?
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] git pull」と「git fetch」の違いは何ですか?
-
[解決済み] コミット前に 'git add' を取り消すにはどうすればよいですか?
-
[解決済み] リモートのGitブランチをチェックアウトするには?
-
[解決済み] Git リポジトリを以前のコミットに戻すにはどうすればよいですか?
-
[解決済み] 現在のGit作業ツリーからローカル(未追跡)ファイルを削除する方法
-
[解決済み] Gitを使って最後のXコミットをまとめる
-
[解決済み】"git pull" でローカルファイルを強制的に上書きするには?
-
[解決済み】ローカルのGitブランチの名前を変更するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Gitで「このリポジトリでは別のgitプロセスが実行されているようです...」と表示される問題
-
git pushで "Updates were rejected because your current branch is behind "というエラーが報告される。
-
git occurs このリポジトリで別のgitプロセスが動作しているようです。例えば、.NETで開いたエディタなど。エラー
-
GitのPlease enter a commit messageで、このマージが必要な理由を説明してください。
-
解決策正しいアクセス権を持っていることと、リポジトリが存在することを確認してください。
-
git reset --hardとgit reset --softの違いについて
-
gitlabの紹介と使い方
-
[解決済み] gitにもsvnのような無視コマンドはありますか?
-
[解決済み] gitでコミット間を前進・後退させる方法は?
-
[解決済み] GitHub: フォークを "自分のプロジェクト "にする