Was sind die Git-Konzepte von HEAD, Master, Origin?

193

Während ich etwas über Git lerne, stoße ich immer wieder auf die Begriffe HEAD, Master, Origin und bin mir nicht sicher, was die Unterschiede sind. Wenn ich das richtig verstehe, entspricht HEAD immer der neuesten Version? Und wenn ja, ist das die neueste Version des gesamten Repositorys oder eines bestimmten Zweigs oder Tags? Das ist so verwirrend. Ich habe so viele Tutorials zu diesem Thema und Dinge wie Verzweigen / Zusammenführen gelesen, kann mich aber immer noch nicht darum kümmern.

user779159
quelle

Antworten:

227

Ich kann das Buch "Pro Git" von Scott Chacon nur empfehlen . Nehmen Sie sich Zeit und lesen Sie es wirklich, während Sie dabei ein aktuelles Git-Repo erkunden.

HEAD : Das aktuelle Commit Ihres Repos ist aktiviert. Die meiste Zeit HEADverweist auf das letzte Commit in Ihrer aktuellen Niederlassung, aber das muss nicht der Fall sein. HEADbedeutet wirklich nur "worauf zeigt mein Repo gerade".

Für den Fall, dass sich das Commit HEADnicht auf die Spitze eines Zweigs bezieht, wird dies als "losgelöster Kopf" bezeichnet.

master : Der Name des Standardzweigs, den git beim ersten Erstellen eines Repos für Sie erstellt. In den meisten Fällen bedeutet "Master" "der Hauptzweig". In den meisten Läden drängen alle auf Master, und Master wird als endgültige Ansicht des Repos angesehen. Es ist aber auch üblich, dass Release-Zweige zum Freigeben aus dem Master gemacht werden. Ihr lokales Repo verfügt über einen eigenen Hauptzweig, der fast immer dem Master eines Remote-Repos folgt.

origin : Der Standardname, den git Ihrem Haupt-Remote-Repo gibt. Ihre Box hat ein eigenes Repo, und Sie werden höchstwahrscheinlich zu einem Remote-Repo wechseln, zu dem Sie und alle Ihre Mitarbeiter pushen. Dieses Remote-Repo wird fast immer als Ursprung bezeichnet, muss es aber nicht sein.

HEADist ein offizieller Begriff in git. HEADhat immer eine klar definierte Bedeutung. masterund originsind gebräuchliche Namen, die normalerweise in git verwendet werden, müssen es aber nicht sein.

Matt Greer
quelle
Was meinst du mit "HEAD" wirklich nur "was zeigt mein Repo gerade auf". Wenn es in einem Repository mehrere Zweige gibt, welcher ist Ihrer Meinung nach der HEAD? Wenn es 3 Zweige gibt (zusammen mit dem Master) und in Zweig A ein Bedarfs-Commit durchgeführt wurde, kann sich der HEAD weiterhin im Commit des 'Masters' befinden. Also, auf welche Revision zeigt das Repo jetzt?
OK999
2
unklar, was Sie unter Repo verstehen (lokal oder remote). Im Allgemeinen verwendet Ihre Antwort Ausdrücke, ohne sie vorher zu erklären.
Ich habe gerade einen Klon in einem parallelen Verzeichnis erstellt, um mein Arbeitsverzeichnis mit der Spitze des Remote-Repos zu vergleichen. So gut sind alle Git-Antworten.
@JingHe Du hast das ganze Buch gelesen? Lohnt es sich wirklich? Ich meine, wir reden über mehr als 500 Seiten, das scheint mir ein bisschen zu viel zu sein ...
Max
1
Um zu überprüfen, ob ich die Logik verstehe, kann ich einen Zweig in Remote als FeatureA aufrufen. Wenn ich zu diesem Zweig pushe, gebe ich "git push origin featureA" ein. Ich kann dasselbe auch von der Fernbedienung abrufen, indem ich "git pull origin featureA" sage und Änderungen vornehme. Und head bezieht sich nur auf die lokale Kopie. @ OK999 Ich glaube, HEAD zeigt auf die Filiale, die Sie gerade in der Region auschecken. Wenn das Commit in Zweig A durchgeführt wurde, Sie sich jedoch derzeit in Zweig B befinden, zeigt der HEAD auf Zweig B. Sie müssen den HEAD zurück zu branchA verschieben, bevor Sie ein bestimmtes Commit ausführen.
TLee
43

HEADist nicht die neueste Version, sondern die aktuelle Version. Normalerweise ist es die neueste Version des aktuellen Zweigs, muss es aber nicht sein.

master ist ein Name, der üblicherweise dem Hauptzweig gegeben wird, aber er kann auch als etwas anderes bezeichnet werden (oder es kann keinen Hauptzweig geben).

originist ein Name, der üblicherweise der Hauptfernbedienung gegeben wird. remote ist ein weiteres Repository, aus dem Sie abrufen und verschieben können. Normalerweise ist es auf einem Server wie Github.

svick
quelle
1
Können Sie ein Beispiel geben, wann HEAD aktuell, aber nicht aktuell ist? Das habe ich noch nie gesehen. Oder meinen Sie, dass es möglicherweise nicht die neueste ist, weil sich Ihre Niederlassung hinter der entfernten Niederlassung befindet, die verfolgt wird?
Matt Greer
12
@MattGreer: Wenn Sie etwas Älteres auschecken (z. B. ein Tag wie git checkout v1.1), ändert sich Ihr HEAD in das Commit dieses Tags. Es ist möglicherweise nicht das letzte Commit.
Greg Hewgill
8

Dies beantwortet die Frage zwar nicht direkt, es gibt jedoch ein kostenloses Buch, mit dem Sie die Grundlagen von ProGit erlernen können . Wenn Sie die Totholzversion einer Sammlung von Bits vorziehen möchten, können Sie sie bei Amazon kaufen .

Piotr Perak
quelle
9
Die Frage hat nicht nach einem Buch gefragt! Es ist mir immer noch unklar, warum ich ein Buch für Git brauchen würde, wenn ich keines für C ++ brauche.
11
Sie denken nur, dass Sie kein Buch für C ++ brauchen;)
Piotr Perak