Heyho, ich brauche mal ein bisschen Hilfe.
Ich habe ein Git Repo mit mehreren Branches, von denen aber nur 2 im Moment wirklich relevant sind. Nennen wir sie Master und Feature.
Passiert ist folgendes: Feature ist irgendwann mal aus Master hervor gegangen. Seit dem gab er reichlich Änderungen an Master und an Feature. Irgendwann wurde beschlossen die beiden zusammen zu führen. Vorgehen wie folgt: Master in Feature mergen. Dabei gab es etliche Konflikte, die von Hand aufgelöst werden mussten, und die auch teilweise Code-Rewrite erforderten. Anschließend gab es ein paar weitere Commits in Feature, um noch einige Fehler aus zu bügeln, die durch den Merge entstanden sind. Als dann alles funktionierte wurde Feature wieder in Master gemerget (Fast Forward). Feature wurde seit dem nicht mehr angefasst. Aber in Master gab es ein paar Änderungen, die nicht inhaltlich im Zusammenhang mit dem Merge stehen, aber durchaus Code betreffen, der auch am Merge beteiligt war.
Jetzt wurde beschlossen den Merge nach Master rückgängig zu machen und ich sitze hier und überlege, wie ich das am sinnvollste anstelle. Ich möchte gerne die Änderungen nach dem Merge nach Master behalten, oder zumindest wieder einbringen können. Außerdem den aktuellen Stand von Master gerne in einem separaten Branch sichern (ich habe nämlich die Vermutung, dass wir das doch noch mal aus dem Keller holen müssen). Der Feature-Branch soll auf seinem gemergeten Stand bleiben.
Nach meinem Verständnis würde ich wie folgt vorgehen:
- Branch Master: git checkout -b backupbranch
- Branch Master: git revert <Comit-IDs> # Hier würde ich die Commits reverten, die zwischen dem Merge von Master nach Feture und dem FF-Merge von Feature nach Master entstanden sind.
- Branch Master: git revert -m 1 <Comit-ID> # Die Commit-ID vom Merge von Master nach Feature rückgängig machen (wohlgemerkt nur un Master)
Allerdings: (Aus man git-revert)
Code:
-m parent-number, --mainline parent-number
Usually you cannot revert a merge because you do not know which
side of the merge should be considered the mainline. This option
specifies the parent number (starting from 1) of the mainline and
allows revert to reverse the change relative to the specified
parent.
Reverting a merge commit declares that you will never want the tree
changes brought in by the merge. As a result, later merges will
only bring in tree changes introduced by commits that are not
ancestors of the previously reverted merge. This may or may not be
what you want.
Das liest sich, als könnte ich die beiden Branches auch nie wieder zusammenführen. Ob ich das wirklich will?
Tja. Und wie geht es "richtig"?
TIA
Look