Wie kann ich sehen, welche Änderungen beim Entstapeln am aktuellen Arbeitsbaum vorgenommen werden? Ich würde gerne wissen, welche Änderungen vorgenommen werden, bevor ich sie anwende!
Wie kann ich sehen, welche Änderungen beim Entstapeln am aktuellen Arbeitsbaum vorgenommen werden? Ich würde gerne wissen, welche Änderungen vorgenommen werden, bevor ich sie anwende!
Antworten:
Siehe den neuesten Vorrat:
git stash show -p
Siehe einen beliebigen Vorrat:
git stash show -p stash@{1}
Aus den git stash
Manpages:
Standardmäßig zeigt der Befehl den diffstat an, akzeptiert jedoch jedes Format, das git diff bekannt ist (z. B. git stash show -p stash @ {1}, um den zweitletzten Stash in Patch-Form anzuzeigen).
stash@{0}
ist die Standardeinstellung; Sie brauchen nur ein Argument, wenn Sie sich frühere Verstecke ansehen möchten.
{0}
.
-p
?
So sehen Sie den neuesten Vorrat:
git stash show -p
So sehen Sie einen beliebigen Vorrat:
git stash show -p stash@{1}
Außerdem verwende ich git diff, um den Stash mit einem Zweig zu vergleichen.
Sie können verwenden:
git diff stash@{0} master
Alle Änderungen im Vergleich zum Zweigstamm anzeigen.
Oder Sie können verwenden:
git diff --name-only stash@{0} master
Um einfach nur geänderte Dateinamen zu finden.
git diff stash@{0} master
ausführen und dann einen Unterschied zwischen Ihrem Stash und dem aktuellen Master erhalten (einschließlich der Arbeit am Master nach dem Stash) wurde gemacht), nicht die Dateien / Zeilen, die der Stash ändern würde, worum es bei der Frage geht.
git difftool --tool=... stash@{0} HEAD
git diff stash@{0}^ stash@{0}
git diff stash@{0} master -- filename
, um die Änderungen an einer bestimmten Datei abzurufen.
Wenn sich der Zweig, auf dem Ihre Änderungen basieren, in der Zwischenzeit geändert hat, kann dieser Befehl hilfreich sein:
git diff stash@{0}^!
Dies vergleicht den Stash mit dem Commit, auf dem er basiert.
~/.gitconfig
:laststash = diff stash@{0}^!
git difftool stash^!
für Diff des letzten Stashs gegen Commit, basierend auf, git difftool stash HEAD
für Diff des letzten Stashs gegen aktuelles Commit (Stash @ {n} für frühere Stashes)
Wenn Ihr Arbeitsbaum schmutzig ist , können Sie ihn mit einem Stash vergleichen, indem Sie zuerst den schmutzigen Arbeitsbaum festschreiben und ihn dann mit dem Stash vergleichen. Anschließend können Sie das Commit mit dem Dirty Working Tree rückgängig machen (da Sie dieses Dirty Commit möglicherweise nicht in Ihrem Commit-Protokoll haben möchten).
Sie können auch den folgenden Ansatz verwenden, um zwei Verstecke miteinander zu vergleichen (in diesem Fall platzieren Sie zuerst nur einen der Verstecke).
Legen Sie Ihren schmutzigen Arbeitsbaum fest:
git add .
git commit -m "Dirty commit"
Diff the stash mit diesem Commit:
git diff HEAD stash@{0}
Anschließend können Sie das Commit zurücksetzen und wieder in das Arbeitsverzeichnis einfügen:
git reset --soft HEAD~1
git reset .
Jetzt haben Sie den schmutzigen Arbeitsbaum mit Ihrem Vorrat entfernt und sind wieder da, wo Sie ursprünglich waren.
git stash show -l
. Unterscheidet es den neuesten Vorrat gegen die funktionierende (schmutzige) Kopie? Wie benutzt man es ohne zu bekommen error: switch l requires a value
?
git stash show -l
. Warum es bei Ihnen nicht funktioniert, kann ich nur vermuten, dass Sie eine ältere Version von git verwenden? Ich bin auf Git v2.20.1 und es funktioniert einwandfrei ohne Fehler.
@ Magnes Antwort ist die einzige bis (sehr späte) Antwort, die die flexibelste / nützlichste Interpretation der Frage beantwortet, aber sie ist ein bisschen komplizierter als nötig. Anstatt festzuschreiben und zurückzusetzen, verstauen Sie einfach Ihre Arbeitskopie, vergleichen Sie sie und entfernen Sie sie.
git stash save "temp"
git diff stash@{0} stash@{1}
git stash pop
Dies zeigt Ihnen die Unterschiede zwischen dem oberen Rand des Stash-Stapels und Ihrem Arbeitsordner, indem Sie vorübergehend Änderungen an Ihrem Arbeitsordner zum oberen Rand des Stash-Stapels vornehmen (stash @ {0}) und den ursprünglichen oberen Rand nach unten verschieben (stash @ {1}) ) Vergleichen Sie dann das ursprüngliche Oberteil an der Position "Neues Set", damit Sie die Änderungen sehen, die sich ergeben würden, wenn Sie es auf Ihre aktuelle Arbeit anwenden.
"Aber was ist, wenn ich keine aktuelle Arbeit habe?" Dann sind Sie im normalen langweiligen Fall. Verwenden Sie einfach die Antwort von @ Amber
git stash show
oder die Antwort von @ czerasz
git diff stash@{0}
oder geben Sie zu, dass das Verstauen und Entstapeln sowieso schnell und einfach ist. Entstapeln Sie einfach die Änderungen und überprüfen Sie sie. Wenn Sie sie im Moment nicht möchten, werfen Sie sie weg (der aktuelle Index / Arbeitsordner ändert sich). In vollem Umfang ist das
git stash apply
git diff
git reset
git checkout
git stash save -u
Dies funktioniert für mich auf Git-Version 1.8.5.2:
git diff stash HEAD
git stash apply
.
Wenn Sie Tools für Diff haben (wie unvergleichlich)
git difftool stash HEAD
git stash apply
.
HEAD
. Ich könnte die Antwort von @ yerlilbilgin ändern, um HEAD zu entfernen, aber ich denke, jeder, der git verwendet, kann diesen Teil herausfinden und eine Verlängerung der Antwort würde ihn weniger lesbar machen. Keine Schuld an @yerlibilgin.
Eine Möglichkeit, dies zu tun, ohne etwas zu bewegen, besteht darin, die Tatsache auszunutzen, dass patch
Git-Diffs gelesen werden können (im Grunde genommen einheitliche Diffs).
git stash show -p | patch -p1 --verbose --dry-run
Dies zeigt Ihnen eine schrittweise Vorschau dessen, was Patch normalerweise tun würde. Der zusätzliche Vorteil dabei ist, dass sich der Patch auch nicht daran hindert, den Patch in den Arbeitsbaum zu schreiben. Wenn Sie aus irgendeinem Grund nur git benötigen, um das Festschreiben vor dem Ändern zu beenden, entfernen Sie --dry- Führen Sie die ausführlichen Anweisungen aus und befolgen Sie sie.
Die Kombination , was ich in diesem Thread und in erfuhr diese , wenn ich sehen will „ was in der Stash ist“, ich zum ersten Mal ausgeführt wird :
git stash show stash@{0}
Das zeigt, welche Dateien geändert wurden. Um ein schönes visuelles Diff in einem Difftool zu erhalten, mache ich Folgendes:
git difftool --dir-diff stash@{0} stash@{0}^
Dadurch werden alle Unterschiede des angegebenen Stashs gegenüber dem übergeordneten Element auf einmal angezeigt.
Sie können das Diff-Tool in konfigurieren ~/.gitconfig
, z. B. mit Meld :
...
[diff]
tool = meld
FWIW Dies kann für alle anderen Antworten etwas redundant sein und ist der akzeptierten Antwort, die genau richtig ist, sehr ähnlich. aber vielleicht hilft es jemandem.
git stash show --help
wird dir alles geben, was du brauchst; einschließlich Stash Show Info.
show [<stash>]
Zeigen Sie die im Stash aufgezeichneten Änderungen als Unterschied zwischen dem Stashed-Status und dem ursprünglichen übergeordneten Status an. Wenn nein angegeben ist, wird die neueste angezeigt. Standardmäßig zeigt der Befehl den diffstat an, akzeptiert jedoch jedes Format, das git diff bekannt ist (z. B. git stash show -p stash @ {1}, um den zweitletzten Stash in Patch-Form anzuzeigen). Sie können die Konfigurationsvariablen stash.showStat und / oder stash.showPatch verwenden, um das Standardverhalten zu ändern.
Sie die Liste der Vorräte
git stash list
stash@{0}: WIP on feature/blabla: 830335224fa Name Commit
stash@{1}: WIP on feature/blabla2: 830335224fa Name Commit 2
Holen Sie sich also die Stash-Nummer und machen Sie:
Du kannst tun:
git stash show -p stash@{1}
Aber wenn Sie einen Unterschied wollen (dies ist anders, um den Stash anzuzeigen, deshalb schreibe ich diese Antwort. Diff
Betrachten Sie den aktuellen Code in Ihrer Branche und show
zeigen Sie einfach, was Sie anwenden werden ).
Sie können verwenden:
git diff stash@{0}
oder
git diff stash@{0} <branch name>
Eine weitere interessante Sache ist:
git stash apply
git stash apply stash@{10}
Dadurch wird der Stash angewendet git checkout .
, ohne ihn aus der Liste zu entfernen. Sie können diese Änderungen entfernen oder, wenn Sie gerne git stash drop stash@{10}
einen Stash aus der Liste entfernen möchten.
Von hier aus empfehle ich niemals, git stash pop
eine Kombination aus git stash apply
und zu verwenden. git stash drop
Wenn Sie einen Stash in der falschen Verzweigung anwenden, ist es manchmal schwierig, Ihren Code wiederherzustellen.
Abhängig davon, womit Sie den Stash vergleichen möchten (lokaler Arbeitsbaum / übergeordnetes Commit / Head-Commit), stehen tatsächlich mehrere Befehle zur Verfügung, darunter der gute alte git diff
und der spezifischere git stash show
:
╔══════════════════════╦═══════════════════════════════╦═══════════════════╗
║ Compare stash with ↓ ║ git diff ║ git stash show ║
╠══════════════════════╬═══════════════════════════════╬═══════════════════╣
║ Local working tree ║ git diff stash@{0} ║ git stash show -l ║
║----------------------║-------------------------------║-------------------║
║ Parent commit ║ git diff stash@{0}^ stash@{0} ║ git stash show -p ║
║----------------------║-------------------------------║-------------------║
║ HEAD commit ║ git diff stash@{0} HEAD ║ / ║
╚══════════════════════╩═══════════════════════════════╩═══════════════════╝
Während git stash show
Aussehen benutzerfreundlicher auf den ersten Blick, git diff
ist eigentlich mehr in mächtig , dass es erlaubt Dateinamen für eine gezieltere diff angeben. Ich habe persönlich Aliase für all diese Befehle in meinem zsh git Plugin eingerichtet .