Morgen alle, Nehmen wir an, ich habe eine Reihe von Commits wie folgt:
Ich weiß, dass ich
verwenden kann %Vor%um einen Patch zum Aktualisieren eines Systems von abc000 auf def555 zu erstellen.
Aber was, wenn ich wollte (aus Gründen, warum ich mich nicht traue) schließe def333 aus dem Patch aus - wie kann ich das tun? Beachten Sie, dass ich def333 nicht zurücksetzen möchte, es ist nur so, dass der Patch dieses Commit nicht enthalten soll.
Danke
Eigentlich alle git diff
s sind commit-paarweise: Das obige vergleicht die Bäume / Dateien in abc000
mit denen in def555
. Wenn zum Beispiel def333
sich ändert dir/file
aber es gibt keine Änderungen an dir/file
zwischen abc000
und def555
(zB die Änderung in def333
wird durch etwas auf dem Weg aufgehoben), sehen Sie vielleicht% nicht co_de% überhaupt drin.
Im Allgemeinen haben Änderungen, die in dir/file
vorgenommen wurden, def333
in einer Weise verändert, die beim Vergleich der Version in dir/file
mit der in abc000
angezeigt wird. So werden Sie wahrscheinlich diese Änderung sehen.
Der einfachste Weg, ein Diff zu erhalten, das anzeigt "wie def555
aussehen würde, wenn def555
zurückgesetzt wurde", ist genau das: Erstellen eines Baumes (in einem temporären Zweig) mit der Änderung rückgängig gemacht. Um dies mit einem tatsächlich benannten Zweig zu tun, könnten Sie etwas wie folgt machen:
Was ist, wenn Sie keine temporäre Zweigstelle möchten? Nun, das ist trivial: Erschaffe einfach keinen. Holen Sie sich einen "abgetrennten KOPF" wie oben beschrieben, machen Sie den Rücksprung wie oben und dann def333
. Es gibt keine temporäre Verzweigung zum Löschen, außer für die unbenannte, die Git warnt, dass Sie zurückbleiben ... was genau das ist, was Sie wollten.
git diff
ist nicht möglich und schließt ein oder mehrere Commits aus. Sie müssen einen neuen Zweig erstellen, die unerwünschten Commits rückgängig machen, sie dann abgleichen und einen Patch erstellen:
ps. Ich wollte Toreks Antwort nicht zu sehr metzeln, also habe ich eine neue gepostet, die meiner Meinung nach prägnanter ist.
Ich würde sagen, dass Sie einen neuen Zweig erstellen, die gewünschten Commits auswählen und dann den Vergleich durchführen