wake-up-neo.com

Git diff gegen ein Versteck

Wie kann ich sehen, dass sich die Änderungen im aktuellen Arbeitsbaum ändern? Ich würde gerne wissen, welche Änderungen vor der Anwendung vorgenommen werden!

1077
Arcabard

Sehen Sie den neuesten Vorrat:

git stash show -p

Einen beliebigen Vorrat sehen:

git stash show -p [email protected]{1}

Auf den git stash-Manpages:

Standardmäßig zeigt der Befehl diffstat an, akzeptiert jedoch alle Format, das für git diff bekannt ist (z. B. git stash show -p stash @ {1}, um das zweitletzte stash in Patch-Form anzuzeigen).

1515
Amber

So sehen Sie den neuesten Vorrat:

git stash show -p

Um ein beliebiges Lager zu sehen:

git stash show -p [email protected]{1}

Ich verwende auch git diff, um den Bestand mit jedem Zweig zu vergleichen.

Sie können verwenden:

git diff [email protected]{0} master

Um alle Änderungen im Vergleich zum Zweigmaster zu sehen .


Oder Sie können verwenden:

git diff --name-only [email protected]{0} master

So finden Sie nur geänderte Dateinamen.

264
czerasz

Wenn sich der Zweig, auf dem Ihre gespeicherten Änderungen basieren, inzwischen geändert hat, kann dieser Befehl nützlich sein:

git diff [email protected]{0}^!

Dies vergleicht den Vorbehalt mit dem Commit, auf dem er basiert.

82
t.heintz

Wenn Ihr Arbeitsbaum schmutzig ist , können Sie ihn mit einem Stash vergleichen, indem Sie zunächst den schmutzigen Arbeitsbaum festlegen und ihn dann mit dem Stash vergleichen. Anschließend können Sie das Festschreiben mit dem Dirty-Working-Tree rückgängig machen (da Sie möglicherweise dieses schmutzige Commit nicht in Ihrem Commit-Protokoll haben möchten).

Sie können den folgenden Ansatz auch verwenden, um zwei Verstecke miteinander zu vergleichen (in diesem Fall müssen Sie zuerst eines der Verstecke platzieren).

  • Übernehmen Sie Ihren schmutzigen Arbeitsbaum:

    git add .
    git commit -m "Dirty commit"
    
  • Verstehe den Vorrat mit diesem Commit:

    git diff HEAD [email protected]{0}
    
  • Anschließend können Sie das Commit rückgängig machen und wieder in das Arbeitsverzeichnis einfügen:

    git reset --soft HEAD~1
    git reset .
    

Jetzt haben Sie den schmutzigen Arbeitsbaum mit Ihrem Vorrat verdeckt und sind wieder da, wo Sie ursprünglich waren. 

34
Magne

Dies funktioniert für mich in git Version 1.8.5.2:

git diff stash HEAD
18
Rimian

@ Magnes answer ist das einzige Datum (sehr spät), das die flexibelste/nützlichste Interpretation der Frage beantwortet, aber es ist einigermaßen komplizierter als nötig. Anstatt zu begehen und zurückzusetzen, legen Sie einfach Ihre Arbeitskopie ab, vergleichen Sie sie und entfernen Sie sie.

git stash save "temp"
git diff [email protected]{0} [email protected]{1}
git stash pop

Das zeigt Ihnen die Unterschiede zwischen dem oberen Rand des Stash-Stacks und Ihrem Arbeitsordner, indem Sie die Änderungen Ihres Arbeitsordners vorübergehend zum oberen Rand des Stash-Stacks (stash @ {0}) machen und den ursprünglichen oberen nach unten verschieben (stash @ {1}). ) und dann mit dem Originaldeckel in der Position des neuen Satzes vergleichen, so dass Sie die Änderungen sehen, die sich aus der Anwendung auf Ihre aktuelle Arbeit ergeben würden.

"Aber was ist, wenn ich keine aktuellen Arbeiten habe?" Dann bist du im normalen langweiligen Fall. Verwenden Sie einfach die Antwort von @ Amber

git stash show

oder @ czeraszs Antwort

git diff [email protected]{0}

oder zugeben, dass das Ein und Auslagern ohnehin schnell und einfach ist, einfach die Änderungen rückgängig machen und prüfen. Wenn Sie sie im Moment nicht möchten, werfen Sie sie weg (der aktuelle Index/Arbeitsordner ändert sich). In vollem Umfang ist das so

git stash apply
git diff
git reset
git checkout
18
SensorSmith

Wenn Sie Werkzeuge für diff haben (wie unvergleichlich)

git difftool stash HEAD
9
yerlilbilgin

FWIWDies kann für alle anderen Antworten ein wenig redundant sein und ist der akzeptierten Antwort sehr ähnlich, die genau vor Ort ist; aber vielleicht hilft es jemandem. 

git stash show --help gibt Ihnen alles, was Sie brauchen sollten; einschließlich Stash-Show-Info.

show [<stash>]

Zeigen Sie die im Stash aufgezeichneten Änderungen als Differenz zwischen dem abgelegten Zustand und dem ursprünglichen übergeordneten Element an. Wenn nein angegeben ist, wird der letzte angezeigt. Standardmäßig zeigt der Befehl diffstat an, er akzeptiert jedoch jedes für git diff bekannte Format (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.

2
Anovative

Eine Möglichkeit, dies zu tun, ohne etwas zu bewegen, besteht darin, die Tatsache zu nutzen, dass patch git diffs lesen kann (unified diffs grundsätzlich).

git stash show -p | patch -p1 --verbose --dry-run

Dies zeigt Ihnen eine Schritt-für-Schritt-Vorschau dessen, was ein Patch normalerweise tun würde. Der zusätzliche Vorteil besteht darin, dass Patch den Patch auch nicht in den Arbeitsbaum schreiben kann. Wenn Sie aus irgendeinem Grund wirklich nur Git brauchen, um den Commit zu beenden, bevor Sie Änderungen vornehmen, fahren Sie fort und entfernen Sie --dry- laufen Sie und folgen Sie den ausführlichen Anweisungen.

1
xenithorb

Ich kombiniere, was ich in diesem Thread und in this gelernt habe und wenn ich sehen will, "was sich im Stash befindet", führe ich zuerst

git stash show [email protected]{0}

Das zeigt, welche Dateien geändert wurden. Um einen schönen visuellen Unterschied in einem difftool zu erhalten, mache ich:

git difftool --dir-diff [email protected]{0} [email protected]{0}^

Dadurch werden alle Unterschiede des angegebenen Vorrats gegenüber dem übergeordneten Element auf einmal angezeigt.

Sie können das Diff-Tool in ~/.gitconfig konfigurieren, z. mit Meld :

...
[diff]
    tool = meld
1
Ferrard

Verwenden Sie den folgenden Befehl, um eine Datei im Arbeitsbaum und im Stash zu vergleichen

git diff stash{0} -- fileName (with path)
0
Pramod B R

Sie ist die Liste der Vorräte

git stash list 
[email protected]{0}: WIP on feature/blabla: 830335224fa Name Commit
[email protected]{1}: WIP on feature/blabla2: 830335224fa Name Commit 2

Also nimm die Vorratsnummer und mache:

Du kannst tun:

 git stash show -p [email protected]{1}

Wenn Sie jedoch einen Vergleich wünschen (dies ist anders, um den Versteck anzuzeigen, schreibe ich deshalb diese Antwort.Diff Betrachten Sie den aktuellen Code in Ihrem Zweig und show zeigen Sie nur an, was Sie anwenden werden )

Sie können verwenden:

git diff [email protected]{0}

oder 

git diff [email protected]{0} <branch name>

Eine andere interessante Sache ist:

git stash apply
git stash apply [email protected]{10}

Dies gilt für den Stash, ohne ihn aus der Liste zu entfernen. Sie können diese Änderungen mit git checkout . entfernen oder, wenn Sie mit git stash drop [email protected]{10} zufrieden sind, um einen Stash aus der Liste zu entfernen.

Von hier aus empfehle ich niemals, git stash pop zu verwenden und eine Kombination aus git stash apply und git stash drop zu verwenden. Wenn Sie einen Stash im falschen Zweig anwenden, ist es manchmal schwierig, Ihren Code wiederherzustellen.

0
Raúl Martín