Angenommen, ich habe ein Feature unter branch1
entwickelt und es zur Code-Überprüfung mit einer GitHub-Pull-Anforderung gesendet. Während es überprüft wird, mache ich einige Folgearbeiten an branch2
.Rebase-Zweig nach GitHub "Squash and merge" auf Master
branch2 -> D --> E --> F
/
branch1 -> A --> B --> C
/
master M
Mein Rezensent liebt meine Arbeit! Es sind keine Änderungen erforderlich. Ich füge die Pull-Anforderung für branch1
mit GitHub Squash and merge Feature zusammen.
Nach git pull
auf master
läuft und Löschen von branch1
, ich bin mit dieser Situation gelassen:
branch2 -> A --> B --> C -> D --> E --> F
/
master M --> S
Um branch2
eine sauber aussehende PR zu senden, würde Ich mag meine bekommen begehen Baum aussehen wie dies:
branch2 -> D' --> E' --> F'
/
master M --> S
der Code bei S
(die durch erzeugte commit "Squash und merge" für branch1
) ist identisch mit C
, da es nur die squa Schuppenversion von A --> B --> C
.
Eine Möglichkeit, dies zu erreichen, wäre eine Sequenz wie diese auf branch2
auszuführen:
git reset --hard S
git cherry-pick D E F
Aber der all Commits aus so langweilig wird, und das ist wirklich fühlt wie ein Fütterungsmaterial. git rebase master
wird natürlich nicht funktionieren, da die Commits A
, B
und C
verschwinden müssen.
Was ist der beste Weg, eine Verzweigung von einer zerquetschten Version eines seiner Vorfahr-Commits zu rebasen?
IIRC können Sie eine Auswahl von commits auswählen, z. 'Cherry-Pick D..F' – Whymarrh
@Whymarrh: Sie können, aber dann müssen Sie' D^'nennen, um' D' selbst zu kopieren. Die Bereichsnotation ähnelt einem halboffenen Intervall, wobei der Anfang und das Ende ausgeschlossen sind. (Obwohl es tatsächlich eine Set-Subtraktion ist!) – torek