VisualStudioプロジェクト用にWindows7でgitExtensionsを使用してGitリポジトリを開きます。いきなり空になります。リポジトリは存在しますが、私のコミットはすべて消えました。
私はグラフィカルインターフェイスを使用していますが、更新されてから初めて開いたと思います。
コミットを取り戻すにはどうすればよいかわかりません。
入力すると
git log
私は受け取ります
fatal:bad default Revision'HEAD '
更新
見てから https://stackoverflow.com/questions/1545407/recovering-broken-git-repository 試しました
git fsck
それが戻った:
エラー:無効なHEAD
致命的:ルーズオブジェクト36b7d9e1ca496bcb864c0b9c8671fcec97fbda31(.git/obj ects/36/b7d9e1ca496bcb864c0b9c8671fcec97fbda31に保存)が破損しています
返品のコミット:
エラー:参照を解決できませんHEAD:そのようなファイルまたはディレクトリはありません
致命的:ロックできませんHEAD ref
マスターブランチのログが返されます
$ git log master警告:壊れたref refs/heads/masterを無視します。警告:壊れたref refs/heads/masterを無視します。致命的:あいまいな引数 'master':不明なリビジョンまたはパスが作業ツリーにありません。 '-'を使用して、パスをリビジョンから分離します
関連する可能性のあるものを貼り付け続けるだけです
$ git reflog master
警告:壊れたref refs/heads/masterを無視します。
警告:壊れたref refs/heads/masterを無視します。
致命的:あいまいな引数 'master':不明なリビジョンまたはパスが作業ツリーにありません。
パスをリビジョンから分離するには、「-」を使用します
より有用な情報:破損したファイルを削除するたびに、別のファイルが代わりに使用されます。私はそれが間違ったものか何かを指しているマスターブランチと関係があると考え始めています。頭がマスターを指していると思うからです。
1日後:
それで、私はこれに私の仲間を連れて行きました、彼はログを調べることができました、そして彼はログのハッシュがフォルダーのオブジェクトと一致しないと言いました。彼はマスターブランチをログなどにリセットしようとしましたが、私は少し迷子になりました。お役に立てば幸いです
リポジトリは存在しますが、私のコミットはすべて消えました。
どういう意味ですか?作業ツリーはまだそこにありますか? .git/
は存在しますか?その中にファイルはありますか?
あなたが投稿したメッセージは、ファイル.git/HEAD
が存在しないことを示唆しています。これは、作業ツリーの予想される状態(チェックアウトしたもの)を定義します。そのファイルがなくなった場合、gitはあなたがどこにいたかを知りません。
次のコンテンツを使用して、自分でファイルを作成してみてください:ref: refs/heads/master
別のブランチを使用している場合は、「master」をブランチ名に置き換えてください。あなたがブランチにいなかったら、それはもっと複雑になるでしょう。
.git/logs/HEAD
は、HEADの過去の状態を記録し、後の行を下部に示します。次の行の例は、チェックアウトを示しています:25f2a6099fb5f9f2192a510c42f704f9fc4bcecb 65abb1a3dc102e2498860f01fb179cda4c51decb Rainer Blome <[email protected]> 1346938344 +0200 checkout: moving from master to MySuperBranch
前のSHA1はコミットを参照します。 .git/logs/refs/heads/master
のように、ブランチログでこれらを見つけることができるはずです。
あなたが与えたgitreflog出力もrefs/heads/master
が欠落しているように見えます。その唯一のコンテンツは、最新のコミット(および改行)のSHA1であると想定されています。最新のSHA1は、ブランチログの最後にあります(例:.git/logs/refs/heads/master
)。
.git/HEADが存在し、その内容がref: refs/heads/master
の場合、ファイルrefs/heads/masterをチェックし、最後のコミットのsha1が含まれている必要があります。
そのファイルが破損していてNULL文字でいっぱいの場合そのファイルを編集し、.git/logs/HEAD
からの最新のコミットのsha1または最後のコミットの前のsha1を配置します。
次に、git reset --hard 'sha1 of the commit that you selected'
を実行します
リポジトリが破損しているようです。最も簡単な方法は、バックアップからリポジトリを回復するか、元のソースからリポジトリを再クローン化することです(リポジトリに大量の作業がなかったと仮定します)。
再設定/クローン作成がオプションでない場合は、 Pro Git (無料のオンラインブックまたは 紙版 )を読むことをお勧めします。本全体は非常に有益ですが、特に最後の章を見て、Gitが内部でどのように機能するかを理解してください。 Gitがどのように機能するかを理解したら、Linusの 破損したオブジェクトを回復するための手順 を見てください。
しばらくウェブをサーフィンした後、私はついにこれを見つけて、それはうまくいきました。
git fetch Origin
git reset --hard Origin/master