webentwicklung-frage-antwort-db.com.de

Was ist der HEAD in git?

Es scheint einen Unterschied zwischen dem letzten Commit, dem HEAD und dem Status der Datei zu geben, die ich in meinem Verzeichnis sehen kann.

Was ist HEAD, was kann ich damit machen und welchen Fehler sollte ich vermeiden?

217
e-satis

HEAD ist ein Verweis auf das letzte Festschreiben im derzeit ausgecheckten Zweig.


Es gibt eine kleine Ausnahme, nämlich den abgetrennten KOPF. Ein abgetrennter HEAD ist die Situation, in der Sie sich befinden, wenn Sie ein Festschreiben (oder ein Tag) anstelle eines Zweigs auschecken. In diesem Fall müssen Sie sich das als temporärer Zweig ohne Namen vorstellen; Anstatt eine benannte Verzweigungsreferenz zu haben, haben wir nur HEAD. Sie können weiterhin Commits ausführen (wodurch HEAD aktualisiert wird), sodass die obige kurze Definition auch dann zutrifft, wenn Sie sich einen getrennten HEAD als temporären Zweig ohne Namen vorstellen.

173
poke

HEAD ist ein Verweis (eine Referenz) auf das derzeit ausgecheckte Commit.

Im Normalfall ist dies ein symbolischer Verweis auf den Zweig, den Sie ausgecheckt haben. Wenn Sie sich den Inhalt von .git/HEAD ansehen, sehen Sie so etwas wie "ref: refs/heads/master". Die Verzweigung selbst ist eine Referenz auf das Festschreiben an der Spitze der Verzweigung. Daher bezieht sich HEAD im Normalzustand effektiv auf das Festschreiben an der Spitze des aktuellen Zweigs.

Es ist auch möglich, einen "abgetrennten KOPF" zu haben. Dies geschieht, wenn Sie etwas anderes als eine (lokale) Verzweigung auschecken, z. B. eine entfernte Verzweigung, ein bestimmtes Commit oder ein Tag. Dies wird am häufigsten während einer interaktiven Rebase angezeigt, wenn Sie ein Commit bearbeiten. Im getrennten Zustand HEAD ist Ihr HEAD ein direkter Verweis auf ein Commit - der Inhalt von .git/HEAD ist ein SHA1-Hash.

Im Allgemeinen ist HEAD nur ein bequemer Name für "was Sie ausgecheckt haben" und Sie müssen sich nicht wirklich darum kümmern. Achten Sie nur darauf, was Sie ausgecheckt haben, und denken Sie daran, dass Sie wahrscheinlich kein Commit ausführen möchten, wenn Sie sich nicht in einem Zweig befinden (losgelöst HEAD state)), es sei denn, Sie wissen, was Sie tun (z. B. in einer interaktiven Rebase).

84
Cascabel

HEAD Zeiger in Git

Git verwaltet eine Referenzvariable namens HEAD. Und wir nennen diese Variable einen Zeiger, weil sie auf ein bestimmtes Commit im Repository verweisen oder darauf verweisen soll. Wenn wir neue Festschreibungen vornehmen, ändert sich der Zeiger oder zeigt auf eine neue Festschreibung. HEAD zeigt immer auf die Spitze des aktuellen Zweigs in unserem Repository. Dies hat jetzt mit unserem Repository zu tun, nicht mit unserem Staging-Index oder unserem Arbeitsverzeichnis.

Eine andere Art, sich das vorzustellen, ist der letzte Status unseres Repositorys oder der zuletzt ausgecheckte Status. Da der Status des Repositorys dort aufgehört hat oder der letzte Status ist, können Sie auch sagen, dass HEAD) verweist an das übergeordnete Element des nächsten Commits oder an den Ort, an dem das Commit-Schreiben stattfinden wird.

Ich denke, eine gute Metapher, um darüber nachzudenken, ist die Wiedergabe und der Aufnahmekopf auf einem Kassettenrekorder. Wenn wir mit der Audioaufnahme beginnen, bewegt sich das Band am Kopf vorbei und nimmt darauf auf. Wenn wir Stop drücken, wird die Stelle, an der der Aufnahmekopf gestoppt ist, erneut mit der Aufnahme begonnen, wenn wir ein zweites Mal auf Record drücken. Jetzt können wir uns bewegen, wir können den Kopf an verschiedene Stellen bewegen, aber wo auch immer der Kopf positioniert ist Wenn wir erneut auf Aufnahme klicken, beginnt die Aufnahme.

Der HEAD Zeiger in Git ist sehr ähnlich. Er zeigt auf die Stelle, an der wir als nächstes mit der Aufnahme beginnen. An dieser Stelle haben wir in unserem Repository aufgehört, was wir haben engagiert sein.

14
Suhail Gupta

Dies hätte ein Kommentar sein sollen, aber es ist zu lang für ein Commit

Ich dachte immer HEAD~5 bedeutet GO to 5 Commits vorher. Der GO-Teil des Befehls ist jedoch nicht enthalten. Es enthält nur den Verweis/"wohin" Teil des Befehls.

In Laienbegriffen wird es verwendet, um die Frage zu beantworten: , WOHIN soll ich gehen? Zu welchem ​​verpflichten?

Wenn du sagst

HEAD bedeutet (der Verweis auf das) aktuelle Commit

HEAD~1 bedeutet (der Verweis auf) 1 Festschreiben vor

HEAD~87 bedeutet (der Verweis auf) 87 Commits vor

git checkout HEAD~1 springt tatsächlich zu dieser Referenz/Festschreibung

13
Honey

In einfachen Worten ist HEAD ein Verweis auf das letzte Festschreiben im aktuellen Auscheck-Zweig.

Stellen Sie sich HEAD als "aktuellen Zweig" vor. Wenn Sie zwischen Zweigen mit git checkout wechseln, ändert sich die HEAD Revision so, dass sie auf die Spitze des neuen Zweigs zeigt .

Sie können sehen, auf was HEAD verweist, indem Sie Folgendes tun:

cat .git/HEAD

Es ist möglich, dass HEAD auf eine bestimmte Revision verweist, die keinem Zweignamen zugeordnet ist. Diese Situation wird als abgetrennter HEAD bezeichnet.

0
Tester Man