git stash list
einfach läuft git log
mit einem bestimmten Satz von Optionen:
list_stash() {
have_stash || return 0
git log --format="%gd: %gs" -g --first-parent -m "[email protected]" $ref_stash --
}
Die [email protected]
Teil Einsätze, was zusätzliche Optionen (keine standardmäßig, aber --date=relative
in diesem Fall) angegeben haben.
Wenn Sie --date=relative
verwenden, um dies ändert die Ausgabe von %gd
: anstelle einem kurzen reflog mit einem Index, Sie mit einem relativen Zeitstempel eine kurze reflog erhalten:
$ git stash list
[email protected]{0}: ...
$ git stash list --date=relative
[email protected]{4 minutes ago}: ...
Der Lösung in diesem Fall ist es, Ihr eigenes explizites Format zu verwenden, anstatt --date=relative
nur ändern zu lassen, wie %gd
angezeigt wird. Zum Beispiel:
$ git stash list --format='%gd (%cr): %gs'
[email protected]{0} (4 minutes ago): ...
(%cr
Einsätze des Committer Zeitstempel des begehen, in relativem Format-das macht Sinn, wenn Sie wissen, dass alle git stash
tun, ist ein paar Commits für Sie, mit den Commits auf dem speziellen gespeichert werden stash
ref statt auf einem Zweig).
Auf diese Antwort bewerten, stelle ich fest, dass die --first-parent
und -m
Argumente (wörtlich in dem git stash
Code) zunächst überflüssig erscheinen, weil das -g
Arguments. Das Argument -g
zu git log
sagt ihm, dass es sich nur auf den Reflog und nicht auf den Commit-Verlauf richten soll. In diesem Fall bedeutet --first-parent
nichts. Unterdessen teilt -m
git diff
mit, um eine Zusammenführung zu teilen, aber wir betrachten Festschreibeprotokolle, nicht Diffs, also was tut das hier?
Die Antwort ist, dass git log
kann einen Patch zeigen, für die es git diff
läuft, also wenn Sie -p
als Argument geben, die --first-parent -m
dieses diff begrenzt auf dem Vergleich der die Stash reflog Punkte gegen seinen ersten Elternteil, mit dem begehen . Das stash bag Commit, auf das der Reflog-Einstiegspunkt verweist, ist der Work-Tree-Commit, dessen erster Eltern der ursprüngliche Commit ist, an dem der Stash-Bag hängt. (Sein zweites Elternteil ist das Index-Commit und sein drittes Elternteil, falls vorhanden, ist das Commit für alle oder nicht vererbte Dateien.) Diese Optionen dienen also dazu, git stash list -p
den Work-Tree-Commit des Stash gegen den Commit zu vertauschen, der beim Stash selbst aktuell war wurde gemacht.
Das ist schlau, aber ziemlich obskur!:-)
Wie https://stackoverflow.com/questions/23263781/git-stashed-date –