2013-04-17 11 views
22

Um den Effekt zu untersuchen, der durch ein vorheriges Commit verursacht wurde, möchte ich es auf meine Arbeitskopie anwenden und mit dem Code herumspielen.Reverse Ein Commit auf die Arbeitskopie anwenden

Ich schaffte es mit einem Workflow rund um das Erstellen und Anwenden eines Patches, aber frage mich, ob dies einfacher gemacht werden kann.

git checkout -b "tmp-fiddle" 
git diff -R -p d9fd2bb^ d9fd2bb > patch_to_examine.patch 
# Manually edit the patch a little 
git apply patch_to_examine.patch 

Bitte beachte, dass ich nicht bei git revert oder git rebase -i da diese Suche würde entweder eine neue einführen begehen oder die Geschichte ändern: ich nur die Änderungen in d9fd2bb eingeführt möchte meine aktuelle Arbeitskopie un-angewendet werden.

+0

Was ist die manuelle Bearbeitung, die Sie tun? –

+0

Das war der Patch nicht sauber anwenden; Warnungen über Whitespace senden. – berkes

Antwort

35

Wie wäre es mit git revert -n?

-n 
--no-commit 

Normalerweise ist der Befehl erstellt automatisch einige Commits mit Logmeldungen hervorgeht, welche Commits rückgängig gemacht wurden. Dieses Flag wendet die Änderungen an, die erforderlich sind, um die benannten Commits in Ihren Arbeitsbaum und den Index zurückzusetzen, führt jedoch keine Commits durch. Wenn diese Option verwendet wird, muss Ihr Index außerdem nicht mit dem HEAD-Commit übereinstimmen. Die Zurücksetzung erfolgt gegen den Anfangszustand Ihres Indexes.

Dies ist nützlich, wenn Sie den Effekt mehrerer Commits hintereinander auf Ihren Index zurücksetzen.

+1

Leider funktioniert das nur so lange, wie Ihre Arbeitskopie keine Änderungen an den Dateien hat, die vom Commit betroffen sind (es kann jedoch Änderungen in anderen Dateien geben). Ich schätze, in diesem Fall brauchst du 'git stash; git revert -n ; git stash pop' und lösche die Konflikte (falls vorhanden). – arekolek