Dies scheint ein beliebter Fehler aus verschiedenen Gründen zu sein.
Ich habe ein einfaches Bare-Git-Repo namens "kiflea.git", ich klone es so:
git clone git://kipdola.be/kiflea.git
Dann sagt mir git: warning: remote HEAD refers to nonexistent ref, unable to checkout.
Und ja, es gibt keine versionierten Dateien in der Karte, außer dem .git-Verzeichnis. Das einzige, was ich tun muss, ist:
cd kiflea
git checkout master
Und es funktioniert, alle Dateien sind da. Aber ich dachte, das Klonen eines Repos überprüft automatisch den Master. Was ist also genau los und wie kann ich das beheben?
Ich habe festgestellt, dass dies nach dem git checkout master
Ausführen zu meiner lokalen .git-Konfigurationsdatei hinzugefügt wird:
[branch "master"]
remote = origin
merge = refs/heads/master
Es ist wahrscheinlich interessant zu wissen, dass dieses Git-Repository in einer fernen Vergangenheit ein SVN-Repository war.
Ps: Wenn Sie mit gitweb das nackte Repository durchsuchen, gibt es dort eindeutig einen master
Zweig: http://kipdola.be/gitweb/?p=kiflea.git;a=summary
git ls-remote origin
zeigt dir?checkout master
Bit:25f600739343a7ce32d6311a1e6140870774810b refs/heads/master
HEAD
. Haben Sie direkten Zugriff darauf? Wenn ja, siehe hiergit clone -b master <url> <dir>
Antworten:
Dies
warning: remote HEAD refers to nonexistent ref, unable to checkout.
bedeutet, dass das entfernte (nackte) Repository in der aufgerufenen Datei eine Verzweigungsreferenz enthältHEAD
, die keiner veröffentlichten Verzweigung im selben Repository entspricht.Beachten Sie, dass die Warnung nur bedeutet, dass git nicht ausgecheckt hat. Das geklonte Repository ist ansonsten in Ordnung. Tun
git branch -a
Sie dies einfach , um mögliche Zweige zu sehen undgit checkout the-branch-you-want
das Problem zu umgehen.Dies geschieht normalerweise, weil der Standardinhalt für diese Datei (
.git/HEAD
oder einfachHEAD
für nackte Repositorys) lautetref: refs/heads/master
, dass jemand, der inclone
dieses Repository geht, standardmäßig den Zweig klonen sollterefs/heads/master
. Standardmäßig erstellt Git einen lokalen Zweig ohne dasrefs/heads/
Präfix (master
dh standardmäßig). Versuchen Sie esgit help symbolic-ref
mit weiteren Informationen.Das Problem in dieser Situation ist, dass Git keine Methode zum Ändern von symbolischen Remote- Refs bereitstellt, sodass Sie entweder etwas verwenden, das der Git-Hosting-Anbieter implementiert hat (z. B. Einstellungen - Standardzweig in GitHub, wenn Sie über Administratorrechte verfügen) oder den Zweignamen verwenden müssen
master
als Standardzweig (da dies der Standardwert für diese symbolische Referenz ist).Wenn Sie Shell-Zugriff auf Ihr Remote-Git-Repo haben, können Sie einfach angeben,
cd path/to/bare/git/repo; git symbolic-ref HEAD refs/heads/XYZ
woXYZ
sich der Filialname befindet, den Sie standardmäßig verwenden möchten.Eine Möglichkeit, dieses Problem zu beheben, besteht darin, ein neues Remote-Bare-Repo ohne Commits zu erstellen und dann zu tun,
git push name-of-the-remote my-special-branch-name
was dazu führt, dass das Bare-Repository einen einzelnen Zweig enthältmy-special-branch-name
, dieHEAD
symbolische Referenz jedoch weiterhin den Standardwert enthält, auf den verwiesen wirdmaster
. Als Ergebnis erhalten Sie die oben genannte Warnung.quelle
checkout
. Das geklonte Repository ist ansonsten in Ordnung. Tun Sie diesgit branch -a
, um mögliche Zweige zu sehen undgit checkout the-branch-you-want
das Problem zu "beheben".git clone -b master
(oder wie auch immer der Name des vorhandenen Zweigs lautet).cd path/to/bare/git/repo; git symbolic-ref HEAD refs/heads/XYZ
woXYZ
ist der Standardzweigname, den Sie verwenden möchten, wenngit clone
dies ohne das-b
Flag erfolgt. Wenn Sie ein anderes Problem haben, stellen Sie bitte eine neue Frage, anstatt Fragen als Kommentare hinzuzufügen.Ich hatte das gleiche Problem, weil ich den
master
Zweig nicht mehr verwendete und er sowohl in meinem lokalen als auch in meinem Remote-Repository verloren ging.Das Remote-Repository hatte noch das
HEAD
Set aufmaster
, ich habe es in einen der Remote-Zweige geändert, die ich tatsächlich verwende, und alles funktioniert einwandfrei.Wenn Sie auf Ihr Remote-Repository zugreifen können:
remote_repo.git
;HEAD
Datei bearbeitenref: refs/heads/master
zuref: refs/heads/your_branch
quelle
broken_branch
mitrefs/heads/master
.cd path/to/bare/git/repo; git symbolic-ref HEAD refs/heads/XYZ
woXYZ
ist der Standardzweigname, den Sie verwenden möchten, wenngit clone
dies ohne das-b
Flag erfolgt, wie ich in einem anderen Kommentar sagte.Ja, dies hängt damit zusammen, dass Ihr Git-Klon versucht, einen anderen Zweig als den Master auszuchecken. Mach das einfach
Auf diese Weise können Sie den genauen Zweig über seinen Zweignamen klonen.
quelle
Obwohl dieser Fehler angezeigt wurde - mein Projekt war immer noch mit dem entsprechenden Repository verbunden -, führte ich den
git branch
Befehl aus und sah die entsprechenden Zweige - dann lief ichgit checkout *branchname
und BOOM - alles war in Ordnung.quelle
Mit Ihrem Remote-Repository stimmt definitiv etwas nicht. Möglicherweise können Sie das Problem beheben, indem Sie einen neuen Klon des Repositorys erstellen. Möglicherweise funktioniert auch das Übertragen eines neuen Commits an den Hauptzweig.
quelle
Ich würde vermuten, dass es der führende
*
im Festschreibungsprotokoll ist, der den Remote-Server irgendwie zum Narren hält.Ich kann die Weboberfläche des Repos mithilfe einiger Menülinks durchsuchen, andere schlagen jedoch mit einem
404 - Unknown commit object
oder einem ähnlichen Fehler fehl , insbesondere auf der Zusammenfassungsseite.Überprüfen Sie, ob Sie diese letzte Festschreibungsnachricht ändern können, und erzwingen Sie dann das Push-Update, um festzustellen, ob dies das Problem behebt. Möglicherweise liegt ein Fehler im Server-Dämon vor. Wenn es das Problem behebt, lohnt es sich, über die Git-Liste [email protected] zu berichten (nur Nur-Text-Nachrichten).
quelle
Ich hatte das gleiche Problem beim Erstellen eines nackten Repos.
Ich habe es gelöst, indem ich nur das Repo geklont, einen lokalen Master-Zweig erstellt und dann den Master auf das Remote-Repo verschoben habe.
1) Klonen Sie das Repo
2) Erstellen Sie lokal einen Hauptzweig.
3) etwas in der lokalen Niederlassung festschreiben
4) Schieben Sie den lokalen Master auf die Fernbedienung
quelle
Wenn tatsächlich kein Hauptzweig verfügbar ist, überprüfen Sie Folgendes: Wenn sich im Ordner ".git" eine Datei mit dem Namen "Packed-Refs" befindet, öffnen Sie diese und Sie können alle aufgelisteten Referenzen finden.
So etwas wie unten;
Dann benutze;
Oder
um die gewünschte Version auszuchecken. Vielen Dank.
quelle
Ich schien es zu beheben mit:
Dadurch wurde der Standardmaster erstellt, und dann konnte ich meine anderen Zweige auschecken
quelle
In meinem Fall war das Repo leer.
quelle
Bei Gitlab wird sogar angezeigt, dass Sie sich in einem Standardzweig befinden (z. B.
master
), in dem Sie sich möglicherweise nicht befinden. Wenn Sie ihn erneut einstellen, beheben Sie ihn wie folgt:asd
master
asd
master
asd
Zweig löschenFertig, jetzt ist Ihr Standardzweig
master
quelle