Unterschied zwischen HEAD und Master

186

Was ist der Unterschied zwischen HEADund masterin Git?

Ich habe einen Klon eines Projekts auf GitHub erstellt und möchte meine Änderungen auf die Fernbedienung übertragen. Aber auf welches soll ich drängen?

Bildschirmfoto

Frederik Heyninck
quelle

Antworten:

162

masterist ein Verweis auf das Ende eines Zweigs. Standardmäßig (und standardmäßig) ist dies normalerweise der Hauptintegrationszweig, muss es aber nicht sein.

HEADist eigentlich eine spezielle Art von Referenz, die auf eine andere Referenz verweist. Es kann auf zeigen master oder nicht (es zeigt auf den Zweig, der gerade ausgecheckt ist). Wenn Sie wissen, dass Sie sich für die masterZweigstelle engagieren möchten, klicken Sie hier.

Hier ist ein visuelles Beispiel:

Alt-Text

In Ihrem eigenen Repository können Sie überprüfen, wohin das HEADzeigt, indem Sie Folgendes ausführen:

$ git symbolic-ref HEAD
refs/heads/master

Es remotes/origin/HEADist jedoch schwieriger herauszufinden, wohin das zeigt, da es sich auf dem Remote-Computer 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

Lee Netherton
quelle
1
+1 Genauere Antwort als meine. Siehe auch stackoverflow.com/questions/3301956/… und stackoverflow.com/questions/3301956/… für Abbildungen zu diesen Konzepten.
VonC
37

Die einfache Antwort lautet: Dies HEADist ein Zeiger / eine Bezeichnung auf das letzte Commit des Zweigs, in dem Sie sich gerade befinden. masterist der Standardzweig, der erstellt wird, wenn Sie ein Git-Repository initialisiert haben (z git init. B. ).

Sie können den masterZweig löschen (zB git branch -D master). Sie können den HEADZeiger nicht löschen .

benhorgen
quelle
6
" HEADist ein Zeiger / eine Bezeichnung auf das letzte Commit des Zweigs, in dem Sie sich gerade befinden." Ich denke, das ist bestenfalls irreführend. Wenn Sie ein älteres Commit auschecken, ist HEAD jetzt ein Zeiger auf dieses ältere Commit und nicht auf das letzte Commit. Richtig?
LarsH
2
Du hast Recht. HEAD ist Ihre neueste Kasse. Zu meiner Verteidigung checkoutentspricht der Befehl für Git dem Wechseln von Zweigen in anderen gängigen SCM-Systemen.
benhorgen
1
Ich sympathisiere ... Ich hätte leicht den gleichen Fehler machen können. Der einzige Grund, warum ich es bemerkt habe, war, dass ich gerade versuche zu erforschen, was HEAD wirklich bedeutet. Gibt es eine Chance, dass Sie Ihre Antwort so bearbeiten, dass sie korrekt ist? Ich finde, dass HEAD ein schwieriges Konzept ist, um genaue Beschreibungen für Git-Nicht-Experten wie mich zu finden. Und wenn Sie im Internet Ratschläge haben, die falsche Informationen über HEAD enthalten, wird dies etwas schwieriger.
LarsH
2
Ich denke, Ihr Kommentar ist eine fantastische Klarstellung für alle, die ein besseres Verständnis dafür suchen, was der Git- HEADZeiger wirklich ist. Ich freue mich über Ihren Kommentar und denke, dass andere dies auch tun werden. Der Inhalt meines ursprünglichen Beitrags und Ihr nachfolgender Kommentar ergänzen sich gegenseitig. Vielen Dank.
benhorgen
4
Eine technische Besonderheit, aber wenn Sie ein älteres Commit auschecken, befinden Sie sich nicht mehr in einem Zweig. Wenn Sie ein Commit anstelle eines Zweigs auschecken, haben Sie einen sogenannten "getrennten HEAD". Sie befinden sich nicht mehr in einem Zweig. In einem Zweig zu sein bedeutet, dass Ihr HEAD auf einen Zweig verweist und Sie sich per Definition auf dem letzten Commit dieses Zweigs befinden. Nur weil Sie das Commit 'b54fe7' ausgecheckt haben und der Master auf dieses Commit verweist, heißt das nicht, dass Sie sich im Master-Zweig befinden. Es kann mehrere Zweige geben, die auf dasselbe Commit verweisen. Sie befinden sich auf dem Zweig, auf den HEAD zeigt, falls vorhanden.
Jason Goemaat
8

Drücken Sie einfach die Änderungen Ihrer aktuellen Filiale

git push origin

und es wird Ihren Zweig ' B' Änderungen an ' origin/B' verschieben.
Wenn Sie in Ihrem masterZweig sind, wird git auf drücken origin/master.
Tatsächlich werden alle Änderungen auf die lokalen Zweige übertragen, bei denen übereinstimmende entfernte Zweige vorhanden sind origin. Es wird durch die Konfigurationseinstellung push.default gesteuert .
Siehe auch RefSpecs im Pro Git-Buch .


Was Sie sehen, ist die Seitenleiste, die alle Refspecs Ihres Remote-Repos in der experimentellen GitX-Gabel des GitX-Projekts darstellt .

Alt-Text

Das HEADbestimmt den Standardzweig für diese Fernbedienung.
Siehe git remote set-headManpage :

Ein Standardzweig für eine Fernbedienung ist nicht erforderlich, ermöglicht jedoch die Angabe des Namens der Fernbedienung anstelle einer bestimmten Verzweigung.
Wenn beispielsweise der Standardzweig für festgelegt originist master, originkann er überall dort angegeben werden, wo Sie normalerweise angeben würden origin/master.

VonC
quelle