Es sind nicht immer zwei Eltern erforderlich, manchmal sind tatsächlich drei erforderlich.
Das folgende Diagramm zeigt das einfachste Szenario mit zwei Elternteilen:
.----S
/ /
-----H----I
Hier wird H
Ihr aktueller Kopf dargestellt, der in Ihrem Beispiel der Hauptzweig ist, und beim Ausführen werden zwei untergeordnete Commits erstellt git-stash
.
Der erste ist I
, der den Index zum Zeitpunkt des Versteckens darstellt. Mit anderen Worten, diese verpflichten enthält die Änderungen , die wurden inszeniert vor stashing. Es hat einen alleinerziehenden Elternteil, auf den HEAD hingewiesen hat. Das zweite ( S
) ist das Stash-Commit, das Dateien enthält, die vor dem Stashing geändert wurden. Es gibt zwei Commits, da sich die Änderungen möglicherweise zusätzlich zu denen in I und H ändern, dh sie können sich auf Dateien auswirken, die bereitgestellt wurden oder nicht.
Das andere Szenario tritt auf, wenn Sie den -u
Schalter für den stash
Befehl bereitstellen , der Git anweist, auch nicht verfolgte Dateien zu speichern. Das Diagramm wird nun:
.----S----.
/ / /
-----H----I U
Das neue U
Commit enthält alle Änderungen, die durch die nicht verfolgten Dateien eingeführt wurden. Beachten Sie, dass es für dieses Commit keinen Sinn macht, Eltern zu haben, da diese Dateien im aktuellen nicht vorhanden sind HEAD
. Das Versteck begehen S
hat jetzt drei Eltern: H
, I
und U
jetzt , wenn die Stash Anwendung begeht Git wird auch die untracked Änderungen zu übernehmen.
Sie können diese Diagramme und die Unterschiede deutlich sehen, indem Sie so etwas wie git log --graph stash@{0}
oder ausführen gitk stash@{0}
.