Ein einzelnes Commit von einem "git diff" ausschließen

8

Morgen alle, Nehmen wir an, ich habe eine Reihe von Commits wie folgt:

  • abc000
  • def111
  • abc222
  • def333
  • abc444
  • def555

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

    
Michael 24.09.2013, 08:58
quelle

4 Antworten

7

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:

%Vor%

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.

    
torek 24.09.2013 09:18
quelle
3

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:

%Vor%

ps. Ich wollte Toreks Antwort nicht zu sehr metzeln, also habe ich eine neue gepostet, die meiner Meinung nach prägnanter ist.

    
Elijah Lynn 11.11.2013 21:17
quelle
1

Ich würde sagen, dass Sie einen neuen Zweig erstellen, die gewünschten Commits auswählen und dann den Vergleich durchführen

    
Manuel van Rijn 24.09.2013 09:08
quelle
0

Sie könnten versuchen, git rebase -i zu verwenden und dann das Commit zu löschen, das Sie nicht benötigen. Eine andere Möglichkeit besteht darin, die Commits auszuwählen, die Sie in einem anderen Zweig benötigen.

    
Hrishi 19.11.2013 05:49
quelle

Tags und Links