1328 Stimmen

Was ist HEAD in Git?

In der Git-Dokumentation stehen Dinge wie

Der Zweig muss vollständig in HEAD zusammengeführt werden.

Aber was ist Git HEAD genau?

47voto

nonopolarity Punkte 138211

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.

29voto

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.

24voto

onmyway133 Punkte 42296

を見てみましょう。 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.

21voto

Was ist HEAD in Git? (konzeptionell)

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 ).

Freistehender HEAD

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.

Illustration of HEAD in attached and detached state.

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.

Überprüfung des Zustands von HEAD

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

Was ist HEAD genau? (technisch)

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?

19voto

user3751385 Punkte 3031

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: Zeiger auf den letzten Commit-Snapshot, der nächste übergeordnete

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.com

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.

Powered by:

X