git: Zusammenführungskonflikte lösen, ohne eine Zusammenführung durchzuführen

Lesezeit: 3 Minuten

Ich möchte nur wissen, ob es eine Möglichkeit gibt, Merge-Commits von zwei Git-Zweigen aufzulösen, ohne sie tatsächlich zusammenzuführen.

Angenommen, ich habe einen Zweig “featureMy”; mein Kollege hat einen weiteren Zweig “featureHis” erstellt. Beide Branches werden im „Master“-Branch erstellt.

Mein Kollege hat dann einen Merge-Request für seinen Branch „featureHis“ in master erstellt. Wenn ich dann meine Zusammenführungsanforderung von „featureMy“ in master erstelle, möchte ich sicherstellen, dass es nicht zu Konflikten mit master kommt, nachdem „featureHis“ zusammengeführt wurde.

Normalerweise werde ich “featureHis” vorher mit “featureMy” zusammenführen. Dies ist jedoch nicht so befriedigend, da ich einen zusätzlichen Merge-Commit als „noise“ habe und mein Merge-Request Änderungen von „featureHis“ enthalten wird.

Gibt es eine Möglichkeit, die Merge-Konflikte zu lösen, ohne einen Merge-Commit zu erstellen?

Mit freundlichen Grüßen

  • Du könntest es tun --no-commit wenn Sie sehen wollen, ob es einen Konflikt geben wird. stackoverflow.com/a/501461/3000179

    – ʰᵈˑ

    27. Juli 2016 um 15:12 Uhr


Benutzer-Avatar
Tim Biegeleisen

Eine Standardmethode zur Vermeidung von Merge-Commits ist die Verwendung von Rebasing anstelle von Merging. Betrachten Sie das folgende Szenario:

master:     A
featureMy:  A -- B
featureHis: A -- C

Angenommen, nur diese beiden Zweige sind noch vorhanden masterdann wird einer von euch mit verschmelzen master Erste. Nehmen wir an, es ist Ihr Kollege, der zuerst dort ankommt. Dann würde das Diagramm so aussehen:

master:     A -- C
featureMy:  A -- B
featureHis: A -- C

Der Commit Ihres Kollegen befindet sich jetzt in der master Zweig. Wenn Sie jetzt einen zusammenführungsbasierten Workflow verwenden, würden Sie zuerst zusammenführen master in Ihren Zweig, und dann führen Sie Ihren Zweig wieder zusammen master. Daraus ergäben sich:

master:     A -- C -- E
featureMy:  A -- B -- D
featureHis: A -- C

Jetzt beide Ihre Branche und das master Branch haben hässliche Merge-Commits in sich. Allerdings, wenn Sie hatten umbasiert Ihre Filiale an masterSie würden übrig bleiben mit:

master:     A -- C
featureMy:  A -- C -- B'    (B' indicates that this a new commit, not B)
featureHis: A -- C

Jetzt Ihre Filiale featureMy ist eigentlich voraus des master Zweig. Sie können Ihr Commit einfach direkt darüber schieben master, ohne Konflikte. Daraus ergibt sich folgendes Diagramm:

master:     A -- C -- B'
featureMy:  A -- C -- B'
featureHis: A -- C

Beachten Sie, dass es sie gibt nein Commits überall zusammenführen. In der Tat, beide Ihre featureMy Zweig und master haben identisch lineare Geschichten.

Lang lebe git rebase.

  • Ich würde hinzufügen, dass er, um seinem aktuellen Workflow zu folgen, zuerst den Branch rebaseen sollte featureMy auf zu featureHis und eventuelle Konflikte lösen. Nach Verzweigung featureHis wird zusammengeführt masterer kann umbasen featureMy auf zu master und zusammenführen master.

    – Geoji

    27. Juli 2016 um 21:36 Uhr

  • Leider ist es sehr selten ein reales Szenario. Meistens featureHis und featureMy sind entfernte Zweige, daher ist eine Neubasis katastrophal und funktioniert nicht.

    – Alex D

    7. August 2019 um 16:37 Uhr

  • Was, wenn alles, was ich will, ist A -- B' ohne das C in featureHis??

    – Loi Nguyen Huynh

    6. September 2021 um 7:37 Uhr

  • “wenn du keinen rostigen hammer benutzen willst, um einen nagel einzuschlagen, kannst du ihn immer noch mit der faust schlagen”

    – Isaak

    28. März um 22:23 Uhr

Wenn Ihre Zusammenführungskonflikte gelöst werden können, indem Sie eine Version einer Datei vollständig verwenden, finden Sie hier eine Lösung.

Angenommen, Sie möchten in einen Zweig namens zusammenführen qa und es gibt Konflikte in composer.json und composer.lock. qa enthält spätere Versionen, die Sie anstelle der in Ihrem Zweig vorhandenen verwenden möchten.

git checkout origin/qa -- composer.json composer.lock
git commit -m "fixed merge conflicts without merging"

1175780cookie-checkgit: Zusammenführungskonflikte lösen, ohne eine Zusammenführung durchzuführen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy