2009-10-09 20 views
9

私の作業gitリポジトリは、それは、その中のすべてのファイルにトラックを失う壊れている、すなわち.gitディレクトリが私のオブジェクトを含んでいますが回復壊れたgitリポジトリ

 
$ git log 
fatal: bad default revision 'HEAD' 
 
$ git status 
... told me that all the files are new 

 
$ git count-objects 
4151 objects, 32692 kilobytes 
 
$ git --version 
git version 1.6.0.4 

私はそれが間違っている(クローン--mirror)NFSマウント型サーバのバックアップリポジトリを作成して行く前にやって覚えている最後のもの

 
$ du -sh .git 
34M .git 
。ただし、複製されたバックアップ・リポジトリは同じ方法で破損します。

リポジトリを復元するにはどうすればよいですか?

+0

リポジトリに 'master'ブランチがありますか?また、 'git log --all'で別の結果を得ますか? –

+0

いいえ、 'git branch -a'は何も教えてくれません。 – Eyoka

答えて

8

クローン以外に何かがあったに違いないが、私はそれらのことを覚えるのがどれほど難しいか知っている。

最初にやりたいことは、.git/refsを見てそこに有効なものがあるかどうかを確認することです(私はあなたにはブランチには見えないと言っているのであまり楽観的ではありませんが、一発)。有効な参考情報があれば、git-reflogから情報を得ることができます。

次に、私はgit-fsckを見始めるでしょう。その主な目的は、データベース内のオブジェクトの接続性と妥当性を検証することです。レポに何が起こったかによって、--unreachableまたは--lost-foundが必要になることがあります。うまくいけば、オブジェクトは無傷なので、ブランチをチェックアウトして再作成するためにいくつかのぶら下がりコミットハッシュを見つけるだけです。

+0

ありがとうございます。私は手動でリポジトリを修正しました。ブランチ(.git/refs/headsのファイル)は欠落していましたが、オブジェクトはそのままでした。 .git/logs/HEADから各ブランチのヒントをコミットすることができました。ブランチファイルを再作成するために使用しました。私はgit-fsckコマンドを知らなかった。 しかし、私はまだこれがどうやって起こったのか不思議で、明らかに私はしなかった

git branch -d
。私はたくさんのgitコマンドを知らないが、覚えているのは覚えているのは
git reset
git remote rm ...
Eyoka

1

手動で調べることはできますが、リポジトリの形式に関する知識が必要です。

リポジトリを見ることなく、何が起こっているのか分かりにくいですが、おそらくファイルが破損している可能性があります。

git fsckを実行すると、リポジトリがまだ有効かどうかがわかります。

git fsckの実行結果を投稿すると、私たちがあなたを助ける手助けをするでしょう。

1

.git /にある各ファイルが現在のユーザーによって所有されているかどうかを確認してください。

私はrootユーザーでコミットしたことを認識したときに同じ問題を抱えていました.git/objectsの下にrootに所属しているオブジェクトを作成し、gitを通常のユーザーとして実行するとエラーが発生しました。

このコマンドは、問題を解決:

sudo chown jb:jb .git/ -R * 
1

私のGitHubのアプリケーション(PC)がクラッシュした後、私はちょうど今、この問題を得ました。私の枝はgit branchを使用すると消えて、私は私の最初のコミットを約束し続けました。私は.git/refs/heads/に私の支店を配置し、それをmybranch.lockからちょうどmybranch(名前はロックを解除する)に改名して解決しました。

+0

だった。この回答は私の場合に役立ちました。私はGitHub for Windowsを使用していて、突然、リポジトリ内のすべてのファイルを新しいファイルとして扱いました。 git logは "fatal:デフォルトのリビジョンが悪い" HEAD '"を返しました。 git fsckはたくさんのぶら下がったコミットを返しました。 master.lockファイルの名前をmasterに変更しなければなりません –

0

デベロッパーが集中リポジトリの裸マスターの内部に$ git initを入れた後に、この問題が発生しました。

作業ディレクトリがないリポジトリを使用している場合は、.gitフォルダを確認してください。これを削除すると、問題が修正されます。

関連する問題