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
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 master
dann 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 master
Sie 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
.
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"
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