Was ist in Magit der Unterschied zwischen einem "Versteck" und einem "Schnappschuss"?

17

Das Magit-Benutzerhandbuch enthält zwei Sätze von "Stashing" -Befehlen: Kleinbuchstaben speichern einen Stash und Großbuchstaben speichern einen Schnappschuss . Nach der Konsultation von Google und Stack Overflow sowie der git-stash(1)Manpage weiß ich immer noch nicht, was der Unterschied ist.

Was ist der Unterschied?

Norman Ramsey
quelle
1
Meines Erachtens stashwerden dadurch auch die Änderungen zurückgesetzt (rückgängig gemacht) und snapshotdie Änderungen im Arbeitsbereich belassen (dies kann hilfreich sein, wenn Sie Commits vor dem Drücken neu anordnen möchten).
wvxvw

Antworten:

24

Sowohl die "Stash" - als auch die "Snapshot" -Variante erstellen dieselben Stash-Objekte. Der Unterschied besteht darin, dass beim Erstellen eines Snapshots die gespeicherten Änderungen nicht aus den Dateien im Arbeitsbaum und / oder im Index entfernt werden. (Genau wie wenn du einen Schnappschuss von deinen Freunden machst, die eine gute Zeit haben - das führt auch nicht dazu, dass sie verschwinden ;-)

Dies ist als eine Art Sicherungsmechanismus gedacht. Angenommen, Sie führen ein kompliziertes Refactoring durch und Sie haben es gerade getestet und der geänderte Code scheint weiterhin zu funktionieren, aber Sie sind noch nicht fertig. Jetzt wäre ein guter Zeitpunkt, um einen Schnappschuss zu erstellen, auf den Sie zurückgreifen können, wenn Sie ihn später vermasseln.

Natürlich können Sie auch nur ein temporäres "Wip" -Ergebnis direkt auf dem Zweig erstellen, an dem Sie gerade arbeiten, um dasselbe zu erreichen. Das ist normalerweise was ich tue.

Durch Aktivieren der Wip-Modi können Sie auch den Prozess der Aufzeichnung laufender Arbeiten automatisieren . Ich habe diese Modi als Sicherheitsnetz aktiviert, aber ich erstelle immer noch WIP-Commits direkt in der aktuellen Filiale oder erstelle einen Snapshot. Diese sind einfacher zu bearbeiten als die Wip-Refs.

Beachten Sie, dass Magit über eine eigene Stash-Implementierung verfügt, die in Elisp geschrieben wurde. Dies war erforderlich, um die Snapshot-Varianten und die Nur-Arbeits-Baum- und Nur-Index-Stash-Varianten zu implementieren. Git bietet keine dieser Varianten an.

Tarsius
quelle