Warum hat mein Git-Zweig keinen Master?

94

Ich bin ein Git-Neuling und lese immer wieder über einen "Master" -Zweig. Ist "Meister" nur ein herkömmlicher Name, den die Leute benutzten, oder hat er eine besondere Bedeutung HEAD?

Wenn ich git branchauf dem Klon arbeite, den ich habe, sehe ich nur einen einzigen Zweig - den, auf dem ich bin. Überhaupt kein "Meister". Wenn ich git checkout mastertippe (wie ich in vielen Tutorials oder Anleitungen sehe), bekomme ich

error: pathspec 'master' did not match any file(s) known to git.

Ich bin nur verwirrt darüber, warum mein Klon keinen hat master, von dem jeder zu implizieren scheint, dass er immer existiert.

aberrant80
quelle

Antworten:

73

Die meisten Git-Repositorys werden masterals Hauptzweig (und Standardzweig) verwendet. Wenn Sie ein neues Git-Repo über initialisieren git init, wird es masterstandardmäßig ausgecheckt.

Wenn Sie jedoch ein Repository klonen, ist der Standardzweig, auf den Sie verweisen, der HEADPunkt, auf den die Fernbedienung zeigt ( HEADtatsächlich ist dies eine symbolische Referenz , die auf einen Zweignamen verweist). Wenn das von Ihnen geklonte Repository beispielsweise einen HEADHinweis hatte foo, hat Ihr Klon nur einen fooZweig.

Die Fernbedienung, von der Sie geklont haben, verfügt möglicherweise noch über einen masterZweig (den Sie überprüfen können git ls-remote origin master), aber Sie hätten standardmäßig keine lokale Version dieses Zweigs erstellt, da git clonenur die Fernbedienung ausgecheckt wird HEAD.

Bernstein
quelle
6
Und wie kann man dann den Master vom Ursprung auschecken, wenn er existiert?
Bunyk
wie man HEAD auf Master setzt
Matt Smith
32
Ich habe mein Repo mit git init erstellt und der Master-Zweig wurde nicht erstellt. Mit Github wird der Zweig automatisch erstellt, nicht jedoch mit Bitbucket. Die mising Schritte waren: git add ., git commit -m "Test", dann git push -u origin master.
Shailen
12
@ Amber Ich erhalte den Fehler "fatal: master: kein gültiger SHA1"
KK_07k11A0585
1
@ Amber git ls-remote origin masterzeigt nichts.
Parisa Khateri
86

Verwenden Sie den folgenden Befehl, um einen Zweig auszuchecken, der lokal nicht vorhanden ist, sich jedoch im Remote-Repo befindet:

git checkout -t -b master origin/master
Bunyk
quelle
Vielen Dank, dass Sie versucht haben zu helfen, obwohl diese Frage ziemlich alt ist. Aber deine Antwort war nicht das, was ich gefragt habe.
aberrant80
fatal: Cannot update paths and switch to branch 'master' at the same time.
Raphael Onofre
Behoben bei Github, einen Hauptzweig zu erstellen und als Standardeinstellung festzulegen
Raphael Onofre
45

master ist nur der Name eines Zweigs, es ist nichts Magisches daran, außer dass es standardmäßig erstellt wird, wenn ein neues Repository erstellt wird.

Sie können es wieder mit hinzufügen git checkout -b master.

Matt Curtis
quelle
git checkout -b masterFügt einfach einen neuen Zweig von dem aktuellen für mich hinzu.
Nnyby
1
@nnyby git checkout -b mastererstellt einen masterZweig aus dem, was auch immer HEADist. Wenn Sie sich also in einem anderen Zweig befinden, wird ein masterZweig daraus erstellt. Außer wenn Sie bereits einen masterZweig haben (was Sie tun werden, es sei denn, Sie haben ihn gelöscht oder nie festgelegt). Wenn Sie bereits eine masterVerzweigung haben, gibt dieser Befehl nur einen Fehler aus.
Matt Curtis
2
Meine Frage ist: Wie habe ich versehentlich Master gelöscht?
Eric Walker
@EricWalker masterist nur ein Zweig, mit dem gelöscht werden kann git branch -d master. Obwohl Git Sie vor dem Löschen des Zweigs schützt, in dem Sie sich gerade befinden, gibt es nichts Besonderes, das den masterZweig schützt . Genauer gesagt ist es schwierig zu sagen, wie Sie es gemacht haben. Vielleicht verwenden Sie den historyBefehl Ihrer Shell , um einen Blick darauf zu werfen?
Matt Curtis
1
Hallo @MattCurtis, Ihre Antwort ist derzeit irreführend. git checkout -b masterfunktioniert nur, wenn HEAD auf origin / master eingestellt ist. In jedem anderen Fall (z. B. bei "Entwickeln") git checkout -b masterwird ein Zweig mit dem Namen "Master" erstellt, der auf der aktuellen HEAD-Position basiert (z. B. bei "Entwickeln"). Sie müssen auch angeben, welcher Zweig der Bast für den neuen sein wird. @ Bunyk hat die richtige Antwort auf diesen Thread: stackoverflow.com/a/21330943/287109
AVIDeveloper
23

Ich hatte tatsächlich das gleiche Problem mit einem völlig neuen Repository. Ich hatte sogar versucht, eine mit zu git checkout -b mastererstellen, aber es würde den Zweig nicht erstellen. Dann wurde mir klar, dass Git meinen Hauptzweig erstellt hat, wenn ich einige Änderungen vorgenommen und sie festgeschrieben habe.

eacousineau
quelle
1
Der irreführende Teil ist, dass die Leute sagen, ich habe den Master, aber was auch immer ich versuche, ich würde Fehlermeldungen erhalten, die besagen, dass ich den Master nicht habe. (Ich habe versucht, einen Entwicklungszweig zu erstellen, während mein Repo noch leer war.) Durch das Festschreiben von etwas (einer beliebigen Datei) entstand nun der Master, und ich konnte andere Dinge tun. Ich habe die Dinge in den anderen Antworten ausprobiert, aber nichts hat geholfen. Diese eine Antwort hier kann für viele Leute da draußen gelten. (Ich habe viel über Hashing in Git gelesen. Ich denke, wenn es am Anfang nichts gibt, gibt es nichts zu hashen.)
Fai Ng
15

In meinem Fall war es eine Entwicklung Zweig , aber kein Master - Zweig. Daher habe ich das Repository geklont und den neu erstellten HEAD auf den vorhandenen Zweig verwiesen. Dann habe ich die fehlende Master - Zweig und Aktualisierung HEAD Punkt auf den neuen Master - Zweig.

git clone git:repositoryname --branch otherbranch
git checkout -b master
git update-ref HEAD master
git push --set-upstream origin master
antoniob
quelle
Ah, los geht's. Ich hatte keinen Meister oder so. Zuerst habe ich eine neue Datei hinzugefügt und das erste Commit ausgeführt - dann habe ich das gemacht. Arbeitete wie ein Zauber
Dustin Silk
12

Wenn es sich um ein neues Repo handelt, das Sie geklont haben, ist es möglicherweise noch leer. In diesem Fall:

git push -u origin master

sollte es wahrscheinlich klären.

(Habe in meinem Fall nicht sicher, ob dies das gleiche Problem ist, dachte, ich sollte dies nur für den Fall posten. Könnte anderen helfen.)

Ziffer
quelle
8

Ich bin auf dasselbe Problem gestoßen und habe das Problem herausgefunden. Wenn Sie ein Repository initialisieren, gibt es eigentlich keine Zweige. Wenn Sie ein Projekt starten, laufen Sie git add .und danngit commit der Hauptzweig erstellt.

Ohne etwas einzuchecken haben Sie keinen Hauptzweig. In diesem Fall müssen Sie die Schritte befolgen, die andere Personen hier vorgeschlagen haben.

Nick ONeill
quelle
2
wahr. Wenn Sie ein "git init" gefolgt von "git checkout -b somebranchname" ausführen, haben Sie keinen Hauptzweig
koem
Dies reicht möglicherweise auch nicht aus, wenn der Ordner leer ist. Damit dies funktioniert, sollten Sie einige Dateien hinzufügen. Diese andere Unbeholfenheit ist tatsächlich enttäuschend.
Alehro
0

Es scheint, dass mindestens ein lokales Commit in der Hauptniederlassung vorhanden sein muss, um Folgendes zu tun:

git push -u origin master

Wenn Sie dies getan haben git init .und dann git remote add origin ...müssen Sie noch Folgendes tun:

git add ...
git commit -m "..."
Zelphir Kaltstahl
quelle