Was ist der Unterschied zwischen der HEAD
und master
im Git?
Ich habe ein Projekt auf GitHub geklont und möchte meine Änderungen auf die Fernbedienung übertragen. Aber zu welchem soll ich schieben?
Frederik Heynink
Was ist der Unterschied zwischen der HEAD
und master
im Git?
Ich habe ein Projekt auf GitHub geklont und möchte meine Änderungen auf die Fernbedienung übertragen. Aber zu welchem soll ich schieben?
Lee Netherton
master
ist ein Verweis auf das Ende einer Verzweigung. Gemäß Konvention (und standardmäßig) ist dies normalerweise der Hauptintegrationszweig, muss es aber nicht sein.
HEAD
ist eigentlich eine spezielle Art von Referenz, die auf eine andere Referenz verweist. Darauf kann es hindeuten master
oder es kann nicht (es zeigt auf den Zweig, der gerade ausgecheckt ist). Wenn Sie wissen, dass Sie sich verpflichten möchten master
verzweigen und dann dorthin schieben.
Hier ist ein visuelles Beispiel:
Auf Ihrem eigenen Repository können Sie überprüfen, wo die HEAD
zeigt auf, indem er Folgendes ausführt:
$ git symbolic-ref HEAD
refs/heads/master
Finden Sie jedoch heraus, wo die remotes/origin/HEAD
zeigt, ist schwieriger, weil es sich auf dem entfernten Rechner befindet.
Hier gibt es ein tolles kleines Tutorial zu Git-Referenzen:
http://people.gnome.org/~federico/news-2008-11.html#pushing-and-pulling-with-git-1
+1 Genauere Antwort als meine. Siehe auch stackoverflow.com/questions/3301956/… und stackoverflow.com/questions/3301956/… für Illustrationen zu diesen Konzepten.
– VonC
8. Dezember 10 um 13:31 Uhr
Was meinst du mit “Ende einer Verzweigung”? Ich dachte, der Master wäre ein Zweig für sich …
– lilredindy
15. Dezember 21 um 19:55 Uhr
Die einfache Antwort ist die HEAD
ist ein Zeiger/Label auf den letzten Commit des Branches, in dem Sie sich gerade befinden. master
ist der Standardzweig, der erstellt wird, wenn Sie ein Git-Repository initialisieren (z git init
).
Sie können die löschen master
Filiale (zB git branch -D master
). Sie können die nicht löschen HEAD
Zeiger.
“HEAD
ist ein Zeiger/Label auf das neueste Commit des Zweigs, auf dem Sie sich gerade befinden.“ Ich denke, das ist bestenfalls irreführend. Wenn Sie ein älteres Commit auschecken, dann ist HEAD jetzt ein Zeiger auf dieses ältere Commit, nicht auf das neueste verpflichten. Richtig?
– LarsH
17. März 16 um 16:36 Uhr
Du hast Recht. HEAD ist Ihr neuster Checkout. Aber zu meiner Verteidigung, für Git, die checkout
Der Befehl ist das Äquivalent zum Wechseln von Zweigen in anderen gängigen SCM-Systemen.
– benhorgen
1. April 16 um 19:38 Uhr
Ich sympathisiere … Ich hätte leicht den gleichen Fehler machen können. Der einzige Grund, warum mir das aufgefallen ist, war, dass ich gerade dabei bin zu recherchieren, was HEAD wirklich bedeutet. Gibt es eine Chance, dass Sie Ihre Antwort korrigieren könnten, damit sie richtig ist? Ich finde, HEAD ist ein schwieriges Konzept, um genaue Beschreibungen für Git-Nicht-Experten wie mich zu finden. Und Ratschläge zu haben, die da draußen im Internet sitzen, die geben falsch Informationen über HEAD machen es etwas schwieriger.
– LarsH
1. April 16 um 20:58 Uhr
Ich denke, Ihr Kommentar ist eine fantastische Klarstellung für alle, die ein genaueres Verständnis dafür suchen, was Git ist HEAD
Zeiger ist wirklich. Ich schätze Ihren Kommentar und denke, andere werden es auch tun. Der Inhalt meines ursprünglichen Beitrags und Ihr Folgekommentar ergänzen sich gegenseitig. Danke.
– benhorgen
7. April 16 um 1:53 Uhr
Eine Formalität, aber wenn Sie einen älteren Commit auschecken, befinden Sie sich nicht mehr auf einem Zweig. Wenn Sie anstelle eines Zweigs einen Commit auschecken, haben Sie einen sogenannten “abgelösten HEAD”, Sie befinden sich nicht mehr “auf einem Zweig”. „Auf einem Zweig“ zu sein bedeutet, dass Ihr HEAD auf einen Zweig verweist, und per Definition befinden Sie sich auf dem neuesten Commit dieses Zweigs. Nur weil Sie den Commit „b54fe7“ ausgecheckt haben und der Master auf diesen Commit zeigt, heißt das nicht, dass Sie sich im Master-Zweig befinden. Es könnte mehrere Zweige geben, die auf denselben Commit zeigen, Sie befinden sich auf demjenigen, auf den HEAD zeigt, falls vorhanden.
– Jason Goemaat
19. November 16 um 6:05 Uhr
VonC
Pushen Sie einfach die Änderungen Ihres aktuellen Zweigs
git push origin
und es wird deinen Zweig schieben ‘B
‘ ändert sich zu ‘origin/B
‘.
Wenn Sie auf Ihrem sind master
branch, git wird pushen origin/master
.
Tatsächlich werden alle Änderungen auf die lokalen Branches übertragen, die über übereinstimmende Remote-Branches verfügen origin
. Es wird durch die Konfigurationseinstellung gesteuert push.default.
Siehe auch Pushen von RefSpecs im Pro Git-Buch.
Was Sie sehen, ist die Seitenleiste, die alle Refspecs Ihres Remote-Repos in der darstellt Experimenteller GitX-Fork des GitX-Projekt.
Der HEAD
wird den Standard-Zweig für diese Fernbedienung festlegen.
Sehen git remote set-head
Manpage:
Es ist nicht erforderlich, einen Standardzweig für eine entfernte Stelle zu haben, ermöglicht aber, dass der Name der entfernten Stelle anstelle eines bestimmten Zweigs angegeben wird.
Wenn beispielsweise der Standardzweig fürorigin
ist eingestellt aufmaster
dannorigin
kann dort angegeben werden, wo Sie normalerweise angeben würdenorigin/master
.
.