Kann mir jemand den Unterschied zwischen HEAD, Arbeitsbaum und Index in Git erklären?
Soweit ich weiß, sind sie alle Namen für verschiedene Zweige. Ist meine Annahme richtig?
Bearbeiten
ich habe das gefunden
Ein einzelnes Git-Repository kann eine beliebige Anzahl von Zweigen verfolgen, aber Ihr Arbeitsbaum ist nur einem von ihnen zugeordnet (dem "aktuellen" oder "ausgecheckten" Zweig), und HEAD zeigt auf diesen Zweig.
Bedeutet dies, dass KOPF und Arbeitsbaum immer gleich sind?
git
version-control
Joyce Babu
quelle
quelle
HEAD
ist das Commit an der Spitze des aktuellen Zweigs. Wenn Sie gerade den Zweig ausgecheckt haben, dh keine geänderten Dateien haben, stimmt sein Inhalt mit dem Arbeitsbaum überein. Sobald Sie etwas ändern, stimmt es nicht mehr überein.Staging Area
dieser Liste auch eine hinzufügen . Was istHEAD
,Working Tree
,Index
undStaging Area
Antworten:
Einige andere gute Referenzen zu diesen Themen:
(Anmerkung: wie kommentiert von Timo Huovinen , diese Pfeile sind nicht das, was die Commits zeigen auf, es ist die Workflow - Reihenfolge , im Grunde zeigt Pfeile , wie ,
1 -> 2 -> 3 -> 4
wo1
der erste begehen und4
ist die letzte)quelle
Der Unterschied zwischen HEAD (aktueller Zweig oder letzter festgeschriebener Status im aktuellen Zweig), Index (auch bekannt als Staging-Bereich) und Arbeitsbaum (Status der Dateien beim Auschecken) wird im Abschnitt "Die drei Status " der "1.3 Git-Grundlagen " beschrieben. Kapitel des Pro Git- Buches von Scott Chacon (Creative Commons lizenziert).
Hier ist das Bild aus diesem Kapitel:
Im obigen Bild ist "Arbeitsverzeichnis" dasselbe wie "Arbeitsbaum", der "Bereitstellungsbereich" ist ein alternativer Name für "git" -Git, und HEAD zeigt auf den aktuell ausgecheckten Zweig, dessen Tipp auf das letzte Festschreiben im "Arbeitsverzeichnis" verweist. Git-Verzeichnis (Repository) "
Beachten Sie, dass
git commit -a
Änderungen vorgenommen und in einem Schritt festgeschrieben werden.quelle
working tree
scheintworking directory
heutzutage vorzuziehen zu sein . Siehe github.com/git/git/commit/…Ihr Arbeitsbaum befindet sich tatsächlich in den Dateien, an denen Sie gerade arbeiten.
HEAD
ist ein Zeiger auf den Zweig oder das Commit, das Sie zuletzt ausgecheckt haben und der das übergeordnete Element eines neuen Commits ist, wenn Sie es ausführen. Wenn Sie sich beispielsweise in dermaster
Verzweigung befinden,HEAD
wird aufmaster
dieses neue Festschreibenmaster
verwiesen , und wenn Sie es festschreiben, ist es ein Nachkomme der Revision, auf die verwiesen wurde, undmaster
wird aktualisiert, um auf das neue Festschreiben zu verweisen.Der Index ist ein Staging-Bereich, in dem das neue Commit vorbereitet wird. Im Wesentlichen wird der Inhalt des Index in das neue Commit aufgenommen. Wenn Sie dies jedoch tun
git commit -a
, werden automatisch alle Änderungen an Dateien, die Git kennt, vor dem Commit zum Index hinzugefügt, sodass der aktuelle Inhalt Ihres Arbeitsbaums festgeschrieben wird ).git add
fügt Dateien aus dem Arbeitsbaum zu Ihrem Index hinzu oder aktualisiert sie.quelle
git commit -a
(Sie müssen sie hinzufügengit add
), sodass Ihr Arbeitsbaum möglicherweise zusätzliche Dateien enthält, die Ihr Index, Ihr lokales Repo oder Ihr Remote-Repo hat nicht.HEAD
bezieht sich auf das letzte Festschreiben. Wenn Sie also festschreiben, aktualisieren SieHEAD
auf Ihr neues Festschreiben, das dem Index entspricht. Pushing hat nicht viel damit zu tun - es werden Zweige in den Remote-Match-Zweigen in Ihrem lokalen Repo erstellt.Arbeitsbaum
Ihr Arbeitsbaum sind die Dateien, an denen Sie gerade arbeiten.
Git-Index
Im Git "Index" platzieren Sie Dateien, die Sie in das Git-Repository übertragen möchten.
Der Index wird auch als Cache , Verzeichnis-Cache , aktueller Verzeichnis-Cache , Staging-Bereich und bereitgestellte Dateien bezeichnet .
Bevor Sie Dateien in das Git-Repository "festschreiben" (einchecken), müssen Sie zuerst die Dateien in den Git-Index "einfügen".
Der Index ist nicht das Arbeitsverzeichnis: Sie können einen Befehl wie
git status
eingeben, und git teilt Ihnen mit, welche Dateien in Ihrem Arbeitsverzeichnis zum git-Index hinzugefügt wurden (z. B. mithilfe desgit add filename
Befehls).Der Index ist nicht das Git-Repository: Dateien im Git-Index sind Dateien, die Git in das Git-Repository festschreiben würde, wenn Sie den Befehl git commit verwenden würden.
quelle
reset --hard HEAD
um sicherzustellen, dass Ihr Index == Ihr Arbeitsbaum ist. und dann:mkdir history && git checkout-index --prefix history/ -a
Das Ergebnis ist eine Verdoppelung Ihres gesamten Arbeitsbaums in Ihremhistory/
Verzeichnis. Ergo Git Index> = Git Arbeitsverzeichnisecho untracked-data > untracked-file
, vor oder nach demgit reset --HARD
undgit checkout-index
Schritte. Sie werden feststellen, dass sich die nicht verfolgte Datei nicht imhistory
Verzeichnis befindet. Sie können sowohl den Index als auch den Arbeitsbaum unabhängig voneinander ändern, obwohl das Ändern des Index ohne vorheriges Berühren des Arbeitsbaums schwierig ist (erfordert die Verwendunggit update-index --index-info
).