Nicht verfolgte Dateien werden im dritten übergeordneten Element eines Stash-Commits gespeichert. (Dies ist nicht wirklich dokumentiert, aber es ist ziemlich offensichtlich aus dem Commit, das die -u-Funktion 787513 ... eingeführt hat , und der Art und Weise, wie der Rest der Dokumentation fürgit-stash
Phrasen Dinge ... oder einfach durch Ausführen git log --graph stash@{0}
)
Sie können nur den "nicht verfolgten" Teil des Stashs anzeigen über:
git show stash@{0}^3
oder nur der "nicht verfolgte" Baum selbst über:
git show stash@{0}^3:
oder eine bestimmte "nicht verfolgte" Datei im Baum über:
git show stash@{0}^3:<path/to/file>
Es gibt leider keine gute Möglichkeit, eine Zusammenfassung der Unterschiede zwischen allen inszenierten + nicht inszenierten + nicht verfolgten und "aktuellen" Zuständen zu erhalten. dh: git show stash@{0}
kann nicht dazu gebracht werden, die nicht verfolgten Dateien einzuschließen. Dies liegt daran, dass das stash@{0}:
Baumobjekt des Stash-Commits selbst, das als bezeichnet wird , keine Änderungen gegenüber dem dritten "nicht bereitgestellten" übergeordneten Element enthält.
Dies liegt an der Art und Weise, wie Stashes erneut angewendet werden: Verfolgte Dateien können einfach als Patches angewendet werden, während nicht verfolgte Dateien theoretisch nur als "ganze Dateien" angewendet werden können.
git stash show
scheint den Unterschied zwischen der Arbeitskopie und # 1 zu zeigen (relevanter Code aus git-stash.sh :git diff ${FLAGS:---stat} $b_commit $w_commit
, wobei $ b_commit # 1 und $ w_commit das Stash-Commit ist); Gibt es eine eingebaute Möglichkeitgit stash show
, auch # 3 aufzunehmen?git log --graph --topo-order -m -u
. matthewlmcclure.com/s/2014/01/10/…fatal: ambiguous argument 'stash@{0}^3': unknown revision or path not in the working tree.
) erhalten, wenn Sie keine nicht verfolgten Dateien in diesem Vorrat haben (aber dachten, dass Sie dies getan haben).git stash show
zeigt nicht die nicht verfolgten Dateien (wahr für mindestens Git 2.7.4):git stash pop
zuerst, nicht verfolgte Dateien wiederherzustellen, und versucht dann, verfolgte Dateien wiederherzustellen. Wenn der letztere Vorgang fehlschlägt (z. B. Konflikt), wird der erste Vorgang nicht zurückgesetzt (der nicht verfolgte Dateistapel bleibt unverändert, aber die Dateien werden nicht von der Festplatte entfernt). Selbst wenn Sie den Konflikt beheben, schlägt der nächste Pop fehl wie auch immer.Sie können alle Stash-Commits mit dem folgenden Befehl auflisten:
Da Stashes als 3-Wege-Merge-Commit von HEAD, dem Index und als übergeordnetes "Root" -Commit von nicht verfolgten Dateien dargestellt werden, können nicht verfolgte Dateistapel aufgelistet werden, indem die obige Ausgabe wie folgt weitergeleitet wird:
Nützliche Anwendungen der oben genannten:
Nur nicht verfolgte, versteckte Dateien anzeigen
Entfernen Sie natürlich die, um
--stat
den Inhalt der Dateien zu sehen.Suchen Sie eine bestimmte Datei
Grep nicht verfolgte Dateien
Listen Sie alle Inhalte aller Verstecke auf
quelle
So listen Sie die nicht verfolgten Dateien im Stash auf:
So zeigen Sie einen vollständigen Unterschied aller nicht verfolgten Dateien (mit Inhalt) an:
Diese Befehle lesen den letzten (letzten) Vorrat. Erhöhen Sie bei früheren Stashes die Zahl hinter dem "stash @", z. B.
stash@{2}
für die zweite vom letzten Stash.Der Grund dafür ist, dass
git stash
für jeden Stash ein Zusammenführungs-Commit erstellt wird, auf das verwiesen werdenstash@{0}
kannstash@{1}
usw. Das erste übergeordnete Element dieses Commits ist der HEAD zum Zeitpunkt des Stashs, das zweite übergeordnete Element enthält die Änderungen an den nachverfolgten Dateien und das drittens (was möglicherweise nicht vorhanden ist) die Änderungen an nicht verfolgten Dateien.Dies wird teilweise in der Manpage unter "Diskussion" erklärt .
quelle
Um alle Dateien im Stash anzuzeigen (sowohl verfolgt als auch nicht verfolgt), habe ich diesen Alias zu meiner Konfiguration hinzugefügt:
Es wird nur ein einziges Argument benötigt, welches Versteck Sie anzeigen möchten. Beachten Sie, dass es weiterhin in zwei aufeinanderfolgenden Listen angezeigt wird.
Der
if...fi
Abschnitt ändert das Bash-Argument $ 1 in 0, wenn keines übergeben wurde.quelle
Eine Problemumgehung: Wenn Sie Dateien vor dem Verstecken bereitstellen,
git stash show -p
funktioniert dies wie erwartet.Hinweis: Auf diese Weise gibt die Kraft Hinzufügen interaktive Teile auch hier, wie .
Achtung: Stellen Sie sicher, dass Sie keine zuvor bereitgestellten Arbeiten haben oder diese nicht unterscheiden können.
Dies kann von Nutzen sein.
quelle