web-dev-qa-db-ja.com

Git '致命的:そのような参照はありません:HEAD'

Gitリポジトリに奇妙なことが起こりました。 tortoisegitウィンドウで何かをコミットしようとすると、プロジェクトからすべてのファイルを受け取ります。私はそれらを元に戻すことはできません。サーバーからプルすると、fatal: No such ref: HEADおよびfatal: Cannot lock the ref 'HEAD'。すべてのローカルブランチがありません。問題を解決する方法はありますか?

これは最初のコミットなどではありません。このことは突然起こりました。

編集:

git branch -a言う:Failed to resolve HEAD as a valid ref

git statusは、新しいファイルとしてマークされたすべてのプロジェクトファイルを印刷します。

リポジトリフォルダー名をしばらく変更しましたが、変更すると元に戻りませんでした。

45
szaman

HEADを紛失したため、再作成する必要があります。最も簡単なことはこれです。

echo ref: refs/heads/master >.git/HEAD

これで、他のgitコマンドを実行して、現在の場所を確認できるはずです。

(理論的には、git symbolic-ref HEAD refs/heads/master新しいgitバージョンは.gitをgitリポジトリとして認識しないようにすることができますが、既にHEADが含まれていない場合、新しいものを作成します。)

67
CB Bailey

HEADは通常、特定のブランチへの参照です。あなたの場合、ブランチポインタが失われているように見えるため、HEAD参照を解決できません。

git fsck --lost-foundを使用して、到達不能オブジェクトのオブジェクトキャッシュをスキャンできます。具体的には、コミットに興味があります。コミットは.git/lost-found/commit/の下にあります。これらはあなたのブランチへのポインタです。あなたがする必要があるのは、どれがどれであるかを見つけ、git branchを使用して新しい参照を作成することです。

6
Simon Richter

この答えは誰かに役立つと思います。私はこの問題をほぼ解決しました。最初にしたことは、Charles Baileyが書いたように、

echo ref: refs/heads/master >.git/HEAD

それから私のブランチはマスターに変わりました。変更をコミットし、メインブランチに切り替えることができました。問題は、ローカルブランチを使用できなかったことです。特にブランチ812で作業したかったので、ブランチ812への最後のコミットを見つけ(コミットが非常に役立つときにメッセージを作成します;))、それに切り替えました。次に、切り替えたブランチに基づいてブランチ812を作成しました。残念ながら、いくつかのファイルが欠落していました。幸いなことに、「エコー」の前にコピーした壊れたレポにそれらがありました

6
szaman

私にとって問題は、Mac OS Xで「uchg」または「uappnd」フラグのいずれかが設定され、パーマに関係なくいくつかのgitファイルがロックされることでした。私はこのようなchflagsをリセットし、それは私のためにそれを解決しました:

Sudo chflags -R 0000 .