46

私の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新しいファイルとしてマークされたすべてのプロジェクト ファイルを印刷します。

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

4

4 に答える 4

67

を失ったHEADので、再作成する必要があります。一番簡単なのはこれです。

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

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

(ただし、理論的には、新しいバージョンの git を試行することはできますが、既に が含まれていない限り、 を git リポジトリとしてgit symbolic-ref HEAD refs/heads/master認識しないため、新しいバージョンを作成することはできません。).gitHEAD

于 2011-01-31T08:29:43.513 に答える
7

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

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

于 2011-01-31T07:58:27.927 に答える
6

この答えは誰かにとって役立つかもしれないと思います。この問題をほぼ解決しました。最初に私がしたことは、チャールズ・ベイリーが書いたように、

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

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

于 2011-01-31T09:29:40.240 に答える
2

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

sudo chflags -R 0000 .
于 2012-04-24T03:15:44.067 に答える