In der Git-Dokumentation stehen Dinge wie
Der Zweig muss vollständig in HEAD zusammengeführt werden.
Aber was ist Git HEAD
genau?
In der Git-Dokumentation stehen Dinge wie
Der Zweig muss vollständig in HEAD zusammengeführt werden.
Aber was ist Git HEAD
genau?
Angenommen, es handelt sich nicht um einen Sonderfall, der "detached HEAD" genannt wird, dann gilt, wie im O'Reilly Git-Buch, 2. Auflage, S. 69, HEAD
bedeutet:
HEAD
bezieht sich immer auf die meisten Einnahmen Zweig. Wenn Sie den Zweig wechseln,HEAD
wird aktualisiert und verweist auf Zweig auf die letzte Übertragung verweist.
also
HEAD
ist die "Spitze" des aktuellen Zweigs .
Beachten Sie, dass wir HEAD
um auf die letzte Übertragung zu verweisen, und verwenden Sie HEAD~
als die Übergabe vor dem Tipp, und HEAD~~
o HEAD~2
als die Übergabe sogar noch früher, und so weiter.
HEAD
bezieht sich auf den aktuellen Commit, auf den Ihre Arbeitskopie verweist, d.h. den Commit, den Sie gerade ausgecheckt haben. Von der offizielle Linux-Kernel-Dokumentation zur Angabe von Git-Revisionen :
HEAD
nennt den Commit, auf dem die Änderungen im Arbeitsbaum basieren.
Beachten Sie jedoch, dass in der kommenden Version 1.8.4 von Git, @
kann auch als Abkürzung verwendet werden für HEAD
als von Git-Mitarbeiter Junio C Hamano in seinem Git Blame-Blog festgestellt :
Anstatt "HEAD" zu schreiben, können Sie auch "@" sagen, z. B. "git log @".
Stack Overflow-Benutzer VonC fand auch einige interessante Informationen darüber, warum @
wurde in seiner Antwort auf eine andere Frage als Kurzform gewählt .
Interessant ist auch, dass es in manchen Umgebungen nicht notwendig ist, die Großschreibung HEAD
Insbesondere in Betriebssystemen, bei denen die Groß- und Kleinschreibung nicht beachtet wird, also in Windows und OS X.
を見てみましょう。 Erstellen und Spielen mit Zweigen
HEAD ist eigentlich eine Datei, deren Inhalt bestimmt, worauf die Variable HEAD verweist:
$ cat .git/HEAD
ref: refs/heads/master
$ cat .git/refs/heads/master
35ede5c916f88d8ba5a9dd6afd69fcaf773f70ed
In diesem Repository verweist der Inhalt der HEAD-Datei auf eine zweite Datei namens refs/heads/master . Die Datei refs/heads/master enthält den Hash der letzten Übertragung auf dem Master-Zweig.
Das Ergebnis ist ein HEAD, der auf den Master-Branch-Commit der .git/refs/heads/master Datei.
HEAD
ein Zeiger auf den aktuell ausgecheckten Zweig oder Commit ist, beantwortet er die Frage: Wo befinde ich mich gerade im Repository? Mit anderen Worten: Git weiß, auf welchen Commit der lokale Arbeitsbaum gespiegelt werden soll und ob Sie gerade an einem Branch arbeiten ( beigefügt ) oder nicht ( freistehend ).
HEAD
kann sich in einem von zwei Zuständen befinden, beigefügt o freistehend je nachdem, ob Sie eine Filiale besucht haben oder nicht. Der Standardstatus ist beigefügt wobei jede Manipulation des Verlaufs automatisch in der Verzweigung aufgezeichnet wird HEAD
derzeit referenziert wird.
Unter freistehend können experimentelle Änderungen vorgenommen werden, ohne einen bestehenden Zweig zu beeinträchtigen. Die folgende Infografik veranschaulicht den Unterschied zwischen zu begehen. im angeschlossenen und im abgenommenen Zustand.
Ein häufiges Missverständnis ist, dass die Nachricht Sie befinden sich im Zustand 'abgetrennter KOPF'. einen falschen Ton anschlägt, während er in Wirklichkeit nur beschreibt, wie HEAD
bezieht sich auf den aktuellen Schnappschuss.
Operationen, die HEAD in losgelöstem Zustand hinterlassen können:
Einen bestimmten Commit auschecken, d.h.
$ git checkout 14ko3
Explizites Auschecken eines entfernten Zweigs, d.h.
$ git checkout origin/master
Wechsel zu einer Verzweigung mit dem Flag detached, d.h.
$ git switch master --detached
Auschecken eines Tags, d.h.
$ git checkout v1.0.1
Durchführen eines interaktiven Rebase oder eines regulären Rebase mit widersprüchlichen Änderungen
Umzug vom freistehenden in den befestigten Zustand
Um vom abgetrennten in den angehängten Zustand zu wechseln, können Sie entweder einen neuen Zweig erstellen oder zu einem bestehenden Zweig zurückwechseln.
Anmerkung: alle Commits, die im losgelösten Zustand erstellt wurden, werden schließlich (nach der Garbage Collection) verworfen, wenn Sie zu einem anderen existierenden Zweig wechseln, ohne Ihre Änderungen vorher in einem neuen Zweig zu speichern.
Herausfinden, welcher Staat HEAD
kann auf verschiedene Weise erfolgen, hier sind zwei Möglichkeiten.
Verwendung von show
$ git show HEAD --oneline
14ko3 (HEAD, master) C1
# If attached, the output would have been
14ko3 (HEAD -> master) C1
Verwendung von status
$ git status
HEAD detached at 14ko3
Wenn Sie einmal ausdrücklich sehen wollen, was HEAD
referenziert, können Sie jederzeit die .git/HEAD
Datei, die von Git intern verwendet wird, um die HEAD
. Die Datei enthält den Namen des Zweigs oder den Commit-Hash, je nachdem, ob HEAD
abgetrennt ist oder nicht.
$ cat .git/HEAD
ref: refs/heads/master
# If detached, the output would have been
14ko36e295f1a98ec57397b3acc7bc247da61ff5
Quelle: Der obige Auszug stammt aus diesem ausführlichen Beitrag zu diesem Thema: Was ist HEAD in Git?
Nachdem ich alle vorherigen Antworten gelesen hatte, wollte ich noch mehr Klarheit. Dieser Blog auf der offiziellen Git-Website http://git-scm.com/blog gab mir das, wonach ich suchte:
Der HEAD in Git ist die Zeiger auf die aktuelle Verzweigungsreferenz, die ihrerseits eine Zeiger auf den letzten Commit, den Sie gemacht haben, oder den letzten Commit, der in Ihr Arbeitsverzeichnis ausgecheckt wurde. Das bedeutet auch, dass es der Elternteil des nächsten Commits sein wird, den Sie machen. Am einfachsten ist es, sich HEAD als den Schnappschuss Ihres letzten Commits vorzustellen.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.