Sie sehen die Git-Dokumentation, die Dinge wie sagt
Der Zweig muss vollständig in HEAD zusammengeführt sein.
Aber was ist Git? HEAD
genau?
Sie sehen die Git-Dokumentation, die Dinge wie sagt
Der Zweig muss vollständig in HEAD zusammengeführt sein.
Aber was ist Git? HEAD
genau?
Sie können sich den HEAD als "aktuellen Zweig" vorstellen. Wenn Sie mit verzweigen git checkout
Die HEAD-Revision ändert sich so, dass sie auf die Spitze des neuen Zweigs zeigt.
Sie können sehen, worauf HEAD verweist, indem Sie Folgendes tun:
cat .git/HEAD
In meinem Fall ist die Ausgabe:
$ cat .git/HEAD
ref: refs/heads/master
Es ist möglich, dass HEAD auf eine bestimmte Revision verweist, die keinem Zweignamen zugeordnet ist. Diese Situation heißt a Abgetrennter Kopf.
Zitieren andere Leute:
Ein Kopf ist einfach ein Verweis auf ein Objekt committen. Jeder Kopf hat einen Namen (Name des Zweigs oder Tags, usw.). Durch Standardmäßig gibt es in jedem einen Kopf Repository namens Master. Ein Repository kann eine beliebige Anzahl von Köpfen enthalten. Beim Zu gegebener Zeit wird ein Kopf ausgewählt als der "aktuelle Kopf". Dieser Kopf ist Alias zu HEAD, immer in Großbuchstaben ".
Beachten Sie diesen Unterschied: ein "Kopf" (Kleinbuchstaben) bezieht sich auf eine der benannte Köpfe im Repository; "KOPF" (Großbuchstaben) bezieht sich ausschließlich auf die derzeit aktiver Kopf. Dies Unterscheidung wird häufig in Git verwendet Dokumentation.
Eine andere gute Quelle, die schnell das Innenleben von Git (und damit ein besseres Verständnis von Köpfen / HEAD) abdeckt, kann gefunden werden Hier. Referenzen (ref :) oder Köpfe oder Zweige können wie Post-It-Notizen betrachtet werden, die im Commit-Verlauf festgeschrieben werden. Normalerweise zeigen sie auf den Tipp einer Reihe von Commits, aber sie können mit verschoben werden git checkout
oder git revert
etc.
Ich empfehle diese Definition von Github-Entwickler Scott Chacon [Videoreferenz]:
Head ist dein aktueller Zweig. Es ist eine symbolische Referenz. Es ist ein Verweis auf eine Verzweigung. Du hast immer HEAD, aber HEAD wird auf einen dieser anderen Zeiger zu einem der Zweige zeigen, auf dem du gerade bist. Es ist das Elternteil Ihres nächsten Commit. Es sollte das sein, was zuletzt in Ihrem Arbeitsverzeichnis ausgecheckt wurde ... Dies ist der letzte bekannte Zustand Ihres Arbeitsverzeichnisses.
Das ganze Video wird eine gute Einführung in das gesamte Git-System geben, daher empfehle ich Ihnen auch, alles zu sehen, wenn Sie Zeit dazu haben.
HEAD ist nur ein spezieller Zeiger, der auf den lokalen Zweig zeigt, auf dem Sie sich gerade befinden.
Von dem Pro Git Buchkapitel 3.1 Git Branching - Branchen in Kürze, im Bereich Erstellen eines neuen Zweiges:
Was passiert, wenn Sie einen neuen Zweig erstellen? Nun, das schafft ein neues Zeiger für Sie, um sich zu bewegen. Nehmen wir an, Sie erstellen einen neuen Zweig Tests genannt. Sie tun dies mit dem git-Verzweigungsbefehl:
$ git branch testing
Dies erzeugt einen neuen Zeiger bei demselben Commit, an dem Sie gerade arbeiten
Woher weiß Git, in welchem Zweig Sie gerade sind? Es hält einen speziellen Zeiger namens HEAD. Beachten Sie, dass dies viel anders ist als das Konzept von HEAD in anderen VCS, die Sie vielleicht gewohnt sind, wie Subversion oder CVS. In Git ist dies ein Zeiger auf den lokalen Zweig Du bist gerade angemeldet. In diesem Fall sind Sie immer noch Master. Der Idiot Der Branch-Befehl hat nur einen neuen Zweig erstellt - es wurde nicht darauf umgeschaltet Ast.
Angenommen, es handelt sich nicht um einen speziellen Fall, der "losgelöster HEAD" genannt wird, wie im Buch O'Reilly Git, 2. Auflage, S.69, HEAD
meint:
HEAD
bezieht sich immer auf den letzten Commit auf dem aktuellen Ast. Wenn Sie Filialen wechseln,HEAD
wird aktualisiert, um auf das Neue zu verweisen das neueste Commit der Branche.
damit
HEAD
ist die "Spitze" der aktuellen Branche.
Beachten Sie, dass wir verwenden können HEAD
auf den letzten Commit verweisen und verwenden HEAD~
als das Commit vor dem Trinkgeld, und HEAD~~
oder HEAD~2
als das Commit noch früher, und so weiter.
HEAD
bezieht sich auf das aktuelle Commit, auf das Ihre Arbeitskopie verweist, d. h. das Commit, das Sie gerade ausgecheckt haben. Von dem offizielle Linux-Kernel-Dokumentation zum Festlegen von Git-Revisionen:
HEAD
Benennt das Commit, auf dem die Änderungen im Arbeitsbaum basieren.
Beachten Sie jedoch, dass in der kommenden Version 1.8.4 von Git, @
kann auch als Kurzschrift verwendet werden HEAD
, wie bemerkt von Git-Mitwirkender Junio C Hamano in seinem Git Blame Blog:
Anstatt "HEAD" einzugeben, können Sie stattdessen "@" sagen, z. "git log @".
Stack Overflow-Benutzer VonC fand auch einige interessante Informationen zu Warum @
wurde als Kürzel in seiner Antwort auf eine andere Frage gewählt.
Interessant ist auch, dass es in manchen Umgebungen nicht notwendig ist, Kapital zu schlagen HEAD
, speziell in Betriebssystemen, bei denen die Groß- und Kleinschreibung nicht berücksichtigt wird, insbesondere Windows und OS X.
Sieh dir das an Erstellen und spielen mit Zweigen
HEAD ist eigentlich eine Datei, deren Inhalt bestimmt, wo sich die HEAD-Variable bezieht:
$ cat .git/HEAD
ref: refs/heads/master
$ cat .git/refs/heads/master
35ede5c916f88d8ba5a9dd6afd69fcaf773f70ed
In diesem Repository bezieht sich der Inhalt der HEAD-Datei auf eine zweite Datei namens Referenzen / Köpfe / Master. Die Datei Referenzen / Köpfe / Master enthält den Hash des letzten Commits auf dem Master-Zweig.
Das Ergebnis ist HEAD zeigt auf den Master-Zweig Commit von der .git / refs / heads / master Datei.
Ich möchte nur ein paar Dinge in Greg Hewgils akzeptierter Antwort aufführen. Entsprechend der Git Taschenführer
Ast:
Der Zweig selbst ist definiert als alle Punkte, die beim Commit erreichbar sind Graph aus dem benannten Commit (die "Spitze" der Verzweigung).
KOPF: Eine spezielle Art von Ref
Der spezielle Ref HEAD legt fest, in welchem Zweig Sie sich befinden ...
Refs
Git definiert zwei Arten von Referenzen oder benannte Zeiger, die es aufruft "Referenzen":
- Ein einfacher Verweis, der direkt auf eine Objekt-ID verweist (normalerweise ein Commit oder ein Tag)
- Ein symbolischer Verweis (oder Symref), der auf einen anderen Verweis verweist (entweder einfach oder symbolisch)
Wie Greg erwähnte, kann HEAD in einem "gelösten Zustand" sein. So kann HEAD entweder ein einfacher Verweis (für einen abgetrennten HEAD) oder ein Symref sein.
Wenn HEAD eine symbolische Referenz für einen bestehenden Zweig ist, dann sind Sie "on" dieser Zweig. Wenn HEAD dagegen ein einfacher Verweis ist Benennen Sie ein Commit durch seine SHA-1 ID, dann sind Sie nicht auf einem Zweig, aber eher im "losgelöste HEAD" -Modus, was passiert, wenn Sie einige auschecken früher begehen zu untersuchen.
Ich denke, HEAD ist das aktuelle Check-out-Commit. Mit anderen Worten: "HEAD" zeigt auf das aktuell ausgecheckte Commit.
Wenn Sie gerade geklont und nicht ausgecheckt haben, weiß ich nicht, worauf es hinweist, wahrscheinlich einen ungültigen Ort.
Ein guter Weg, um den Punkt in den richtigen Antworten nach Hause zu fahren, ist zu laufen
git reflog HEAD
, Sie erhalten eine Geschichte von allen Orten, auf die HEAD hingewiesen hat.
Nachdem ich alle vorherigen Antworten gelesen hatte, wollte ich noch mehr Klarheit. Dieser Blog auf der offiziellen git Webseite http://git-scm.com/blog gab mir, wonach ich gesucht hatte:
Der Kopf in Git ist der Zeiger an den aktuellen Zweig Referenz, die wiederum ein ist Zeiger bis zum letzten Commit, den Sie gemacht haben, oder dem letzten Commit, der in Ihr Arbeitsverzeichnis ausgecheckt wurde. Das bedeutet auch, dass es das Elternteil des nächsten Commits sein wird, das Sie tun. Es ist im Allgemeinen am einfachsten, es als HEAD zu betrachten, da dies der Snapshot Ihres letzten Commits ist.