Editar: Siehe Antwort von cambunctious Das ist im Grunde das, was ich jetzt bevorzuge, weil es nur die Änderungen im Vorrat verwendet, anstatt sie mit dem aktuellen Zustand zu vergleichen. Dadurch wird der Vorgang additiv, und die Wahrscheinlichkeit, dass die Arbeit, die seit der Erstellung des Vorratslagers geleistet wurde, rückgängig gemacht wird, ist wesentlich geringer.
Um dies interaktiv zu tun, müssten Sie zunächst
git diff stash^! -- path/to/relevant/file/in/stash.ext perhaps/another/file.ext > my.patch
...öffnen Sie dann die Patch-Datei in einem Texteditor, ändern Sie sie nach Bedarf und führen Sie dann Folgendes aus
git apply < my.patch
Die Antwort von cambunctious umgeht die Interaktivität, indem sie einen Befehl direkt an den anderen weiterleitet, was in Ordnung ist, wenn Sie wissen, dass Sie alle Änderungen aus dem Versteck haben wollen. Sie können die stash^!
auf einen beliebigen Commit-Bereich, der die gewünschten kumulativen Änderungen enthält (überprüfen Sie jedoch zuerst die Ausgabe des Diffs).
Wenn die Anwendung des Patches/Diffs fehlschlägt, können Sie den letzten Befehl ändern in git apply --reject
der alle möglichen Änderungen vornimmt und die .rej
Dateien, in denen es Konflikte gibt, die es nicht auflösen kann. Die Website .rej
Dateien können dann mit wiggle
, etwa so:
wiggle --replace path/to/relevant/file/in/stash.ext{,.rej}
Dadurch wird der Konflikt entweder aufgelöst oder Sie erhalten Konfliktmarker, die Sie bei einer Zusammenführung erhalten würden.
Wenn Ihre Distro nicht über wiggle
können Sie es einfach bauen:
cd /usr/local/src/
git clone git://git.neil.brown.name/wiggle
cd wiggle/
git checkout v1.3
make install
Vorherige Lösung: Es gibt eine einfache Möglichkeit, Änderungen aus jedem Zweig, einschließlich Stashes, zu erhalten:
$ git checkout --patch stash@{0} path/to/file
Sie können die Dateispezifikation weglassen, wenn Sie viele Teile patchen wollen. Oder lassen Sie patch (aber nicht den Pfad) weg, um alle Änderungen in einer einzigen Datei zu erhalten. Ersetzen Sie 0
mit der Verstecknummer aus git stash list
, wenn Sie mehr als eine haben. Beachten Sie, dass dies so ist wie diff
und Angebote zur Bewerbung todo Unterschiede zwischen den Zweigen. Um Änderungen von nur einem einzigen Commit/Stash zu erhalten, schauen Sie sich Folgendes an git cherry-pick --no-commit
.