Ich lege oft Arbeit für später weg, dann kommen andere Dinge hinzu, und ein paar Wochen später möchte ich den Vorrat untersuchen und herausfinden, welche Änderungen er vornehmen würde, wenn ich ihn auf den Arbeitsbaum in seinem aktuellen Zustand anwenden würde.
Ich weiß, dass ich einen Git-Diff auf dem Stash machen kann, aber dies zeigt mir alle Unterschiede zwischen dem Arbeitsbaum und dem Stash, während ich nur interessiert bin, was sich für den Stash-Apply ändern wird.
Wie kann ich das machen?
git stash show -p stash@{1} >~/.diff && vim ~/.diff
(muss keinvim
Texteditor sein, solange Ihr Texteditor Syntax-Hervorhebungsunterstützung für diediff
Ausgabe bietet ).Antworten:
git stash show
zeigt Ihnen die Dateien, die sich in Ihrem letzten Stash geändert haben. Sie können die-p
Option hinzufügen , um das Diff anzuzeigen.Wenn der Stash, an dem Sie interessiert sind, nicht der aktuellste ist, fügen Sie den Namen des Stashs am Ende des Befehls hinzu:
quelle
fatal: unable to create temp-file: Invalid argument
eine Idee warum?git stash show -p stash@{0}
diese Option, um einen bestimmten Vorrat anzuzeigen. 0 zeigt den letzten Ton, 1 den vorletzten .. usw.git stash list
zeigt alle verfügbaren an.git stash show -p 'stash@{0}'
)git stash show -p stash@{0}> stash.txt
So zeigen Sie eine aktuelle Liste der Vorräte an:
Sie sehen eine Liste wie diese:
So zeigen Sie Unterschiede bei diesen Verstecken an:
quelle
Ich bin ein Fan der
gitk
grafischen Benutzeroberfläche zur Visualisierung von Git-Repos. Sie können den letzten Artikel anzeigen, der mit:Sie können auch die Ansicht Ihrer versteckten Änderungen (wie von aufgelistet
git stash list
) verwenden. Zum Beispiel:Im folgenden Screenshot sehen Sie den Stash oben links als Commit, wann und woher er im Commit-Verlauf stammt, die Liste der unten rechts geänderten Dateien und den zeilenweisen Unterschied unten -links. Während das Versteck noch versteckt ist.
quelle
stash@{X}
Werte in der Befehlszeile angeben, um mehr Ergebnisse gleichzeitig anzuzeigen, aber ich habe keine einfache Möglichkeit gefunden, in gitk einfach "Alle Stash-Einträge anzeigen" zu sagen.gitk stash
scheint eine Abkürzung fürgitk stash@{0}
gitk `git stash list --pretty=format:%gd`
und dann nach "WIP on" suchen, um zum nächsten Stash zu springen.gitk --reflog
Hier können Sie alle Verstecke und mehr sehen.So zeigen Sie alle Änderungen in einem nicht platzierten Stash an:
So zeigen Sie die Änderungen einer bestimmten Datei in einem nicht geöffneten Stash an:
quelle
-p
steht für--patch
. Die Option kommt vongit-diff
. Wenn Sie die lange Form bevorzugen, können Sie schreibengit stash show --patch
.Über die Gitk-Empfehlung in Ist es möglich, Stash-Inhalte in Git in der Vorschau anzuzeigen ? Sie können tig installieren und anrufen
tig stash
. Mit diesem kostenlosen / offenen Konsolenprogramm können Sie auch auswählen, welcher Stash verglichen werden sollquelle
P
und!
jeweils Tasten.gitk
, ist es relativ einfach, sie zu hacken, um alle Verstecke zu zeigen .Ich benutze dies, um alle meine Verstecke mit Farbdiff-Hervorhebungen zu sehen (auf Fedora 21):
(Angepasst an Git: Sehen Sie, was sich in einem Stash befindet, ohne Stash anzuwenden. )
quelle
Als diese Frage zum ersten Mal gestellt wurde, war dies möglicherweise keine Option. Wenn Sie jedoch PyCharm verwenden, können Sie das
UnStash Changes
Tool verwenden (VCS-> Git-> UnStash Changes ...). Auf diese Weise können Sie die Liste der versteckten Änderungen anzeigen sowie Pop, Drop, Clear oder Apply (falls gewünscht in einen neuen Zweig):und zeigen Sie die geänderten Dateien pro Stash an:
sowie Unterschiede pro Datei. In den Diffs können Sie einzelne Änderungen auswählen, die aus den versteckten Änderungen auf den Arbeitszweig angewendet werden sollen (unter Verwendung des nach links zeigenden Chevrons):
quelle
Sie können die Liste aller Stashes mit dem folgenden Befehl anzeigen:
Das neueste Versteck ist das erste.
Sie können einfach
n
den in der obigen Liste angegebenen Versteckindex auswählen und mit dem folgenden Befehl die Versteckdetails anzeigenÄhnlich,
Sie können diff auch mit dem folgenden Befehl überprüfen:
quelle
Ja, der beste Weg, um zu sehen, was geändert wird, besteht darin, in einer solchen Datei zu speichern:
quelle
Zuerst können wir die Git-Stash-Liste verwenden, um alle Stash-Elemente zu erhalten:
Dann können wir
git stash show stash@{N}
die Dateien unter einem bestimmten Stash überprüfenN
. Wenn wir es abfeuern, können wir bekommen:Der Grund dafür kann sein, dass die Muschel geschweifte Klammern auffrisst und Git sieht
stash@2
und nichtstash@{2}
. Und um dies zu beheben, müssen wir einfache Anführungszeichen für geschweifte Klammern verwenden als:quelle
Liste der versteckten Änderungen anzeigen
Zum Anzeigen der Liste der Dateien, die in einem bestimmten Stash geändert wurden
Zum Anzeigen einer bestimmten Datei im Stash
quelle
Zeige alle Verstecke
Nur Dateinamen:
Vollständiger Dateiinhalt in allen Verstecken:
Sie erhalten eine kolorierte Diff-Ausgabe, mit der Sie space ( vorwärts ) und b( rückwärts ) qblättern und den Pager für den aktuellen Stash schließen können. Wenn Sie es lieber in einer Datei haben möchten, fügen Sie
> stashes.diff
es dem Befehl hinzu.quelle
Zusätzlich zu den vorhandenen Antworten, die die Verwendung vorschlagen (um den Unterschied zwischen dem drittletzten Vorrat anzuzeigen)
Beachten Sie, dass in der
git-stash
Dokumentation geschrieben steht, dassDaher ist es auch möglich zu verwenden (dies entspricht dem obigen Befehl)
Dies sollte auch einige Powershell-Probleme vermeiden .
quelle
Mir gefällt, wie
gitk
Sie genau anzeigen können, was nicht verfolgt wurde oder sich im Index befindet, aber standardmäßig werden diese "Commits" in der Mitte aller anderen Commits im aktuellen Zweig angezeigt.Der Trick besteht darin, gitk wie folgt auszuführen:
(Das Zitat dient dazu, dass es in Powershell funktioniert, aber auf diese Weise sollte es auch in anderen Shells funktionieren.)
Wenn Sie diese Syntax auf der Hilfeseite von gitrevisions nachschlagen, finden Sie Folgendes:
Dies wird anscheinend gitk in einen solchen Modus versetzen, dass nur die unmittelbaren Eltern des ausgewählten Commits angezeigt werden, was genau das ist, was ich mag.
Wenn Sie dies weiter verfolgen und alle Verstecke auflisten möchten, können Sie Folgendes ausführen:
(Diese einfachen Anführungszeichen in den Backticks sind erforderlich, um Bash zu beschwichtigen, andernfalls wird das Ausrufezeichen beanstandet.)
Wenn Sie unter Windows arbeiten und cmd oder Powershell verwenden:
quelle
Der folgende Befehl kann verwendet werden, um Diff von versteckten Änderungen gegen andere Stashs oder Commits oder Zweige oder HEADs zu extrahieren.
Mal sehen, wie wir jeden der oben genannten Befehle verwenden können.
Um den Unterschied zwischen dem obersten Versteck @ {0} und dem Hauptzweig zu ermitteln:
$ git diff stash @ {0} master
Zeigen Sie nur die Namen der Dateien an, nicht die Unterschiede der Änderungen:
$ git diff - Nur-Name-Stash @ {0} Master
Sehen Sie den Unterschied zwischen ausgewählten Verstecken für eine ausgewählte Datei:
$ git diff stash @ {0} ^ 1 stash @ {0} -
Sehen Sie den Unterschied zwischen den letzten beiden Verstecken:
$ git difftool stash @ {0} stash @ {0} ^ 1
git difftool --dir-diff stash @ {0} stash @ {0} ^ 1
Zusammenfassung:
Befehle, die nützlich sind, um das Diff aus ausgewählten Stash-Git-Stash-Shows, Git-Shows, Git-Diffs und Git-Difftools zu extrahieren.
Siehe Unterschied mit dem Befehl git stash show,
git stash show -p stash @ {0}
Sehen Sie sich die Änderungen im Stash mit dem Befehl git show an.
git show stash @ {1}
Ermitteln Sie den Unterschied zwischen dem letzten Stash und dem ausgewählten Commit mit dem Befehl git diff.
git diff stash @ {0}
Verweise:
https://howto.lintel.in/how-to-see-stashed-changes-using-git-stash/
https://git-scm.com/docs/git-show
https://git-scm.com/docs/git-stash
quelle