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
は、新しいファイルとしてマークされたすべてのプロジェクトファイルを印刷します。
リポジトリフォルダー名をしばらく変更しましたが、変更すると元に戻りませんでした。
HEAD
を紛失したため、再作成する必要があります。最も簡単なことはこれです。
echo ref: refs/heads/master >.git/HEAD
これで、他のgitコマンドを実行して、現在の場所を確認できるはずです。
(理論的には、git symbolic-ref HEAD refs/heads/master
新しいgitバージョンは.git
をgitリポジトリとして認識しないようにすることができますが、既にHEAD
が含まれていない場合、新しいものを作成します。)
HEAD
は通常、特定のブランチへの参照です。あなたの場合、ブランチポインタが失われているように見えるため、HEAD参照を解決できません。
git fsck --lost-found
を使用して、到達不能オブジェクトのオブジェクトキャッシュをスキャンできます。具体的には、コミットに興味があります。コミットは.git/lost-found/commit/
の下にあります。これらはあなたのブランチへのポインタです。あなたがする必要があるのは、どれがどれであるかを見つけ、git branch
を使用して新しい参照を作成することです。
この答えは誰かに役立つと思います。私はこの問題をほぼ解決しました。最初にしたことは、Charles Baileyが書いたように、
echo ref: refs/heads/master >.git/HEAD
それから私のブランチはマスターに変わりました。変更をコミットし、メインブランチに切り替えることができました。問題は、ローカルブランチを使用できなかったことです。特にブランチ812で作業したかったので、ブランチ812への最後のコミットを見つけ(コミットが非常に役立つときにメッセージを作成します;))、それに切り替えました。次に、切り替えたブランチに基づいてブランチ812を作成しました。残念ながら、いくつかのファイルが欠落していました。幸いなことに、「エコー」の前にコピーした壊れたレポにそれらがありました
私にとって問題は、Mac OS Xで「uchg」または「uappnd」フラグのいずれかが設定され、パーマに関係なくいくつかのgitファイルがロックされることでした。私はこのようなchflagsをリセットし、それは私のためにそれを解決しました:
Sudo chflags -R 0000 .