Früher habe ich immer die Kirschen gepflückt, aber von Zeit zu Zeit hatte ich einige mysteriöse Probleme. Ich bin auf einen Blog von Raymond Chen gestoßen, der seit 25 Jahren bei Microsoft arbeitet und einige Szenarien beschreibt, in denen Cherry Picking in bestimmten Fällen Probleme verursachen kann.
Eine Faustregel besagt, dass es früher oder später zu Problemen kommen wird, wenn man von einem Zweig in einen anderen wechselt und dann zwischen diesen Zweigen zusammenführt.
Hier ein Verweis auf die Blogs von Raymond Chen zu diesem Thema: https://devblogs.microsoft.com/oldnewthing/20180312-00/?p=98215
Das einzige Problem, das ich mit Raymonds Blog hatte, ist, dass er kein vollständiges Arbeitsbeispiel zur Verfügung gestellt hat. Also werde ich versuchen, eine hier zu bieten.
In der obigen Frage wird gefragt, wie man nur den Commit zusammenführt, auf den der HEAD in der a-good-feature verzweigen zu Meister .
Dies würde folgendermaßen ablaufen:
- Finden Sie den gemeinsamen Vorfahren zwischen den Meister y a-good-feature Zweige.
- Erstellen Sie einen neuen Zweig von diesem Vorgänger, nennen wir ihn neuer Zweig Patch .
- Wählen Sie eine oder mehrere Übertragungen in diese neue Patch Zweigstelle.
- Führen Sie den Patch-Zweig in beide die Meister und a-good-feature Zweige.
- Le site Meister Zweig enthält nun die Übertragungen, und beide Meister y a-good-feature Zweige haben auch einen neuen gemeinsamen Vorfahren, der alle zukünftigen Probleme lösen wird, wenn später weitere Zusammenführungen vorgenommen werden.
Hier ist ein Beispiel für diese Befehle:
git checkout master...a-good-feature [checkout the common ancestor]
git checkout -b patch
git cherry-pick a-good-feature [this is not only the branch name, but also the commit we want]
git checkout master
git merge patch
git checkout a-good-feature
git merge -s ours patch
Es ist vielleicht erwähnenswert, dass die letzte Zeile, die in die a-good-feature Zweig verwendet die " -s unser Zusammenführungsstrategie". Der Grund dafür ist, dass wir einfach eine Übergabe in der a-good-feature Zweig, der auf einen neuen gemeinsamen Vorfahren verweist, und da sich der Code bereits in diesem Zweig befindet, wollen wir sicherstellen, dass es nicht zu einem Merge-Konflikt kommt. Dies wird noch wichtiger, wenn die Übergabe(n), die Sie zusammenführen, nicht die neuesten sind.
Die Szenarien und Details rund um partielle Zusammenführungen können ziemlich tiefgründig sein, daher empfehle ich, alle 10 Teile des Blogs von Raymond Chen zu lesen, um ein umfassendes Verständnis dafür zu erlangen, was schiefgehen kann, wie man es vermeiden kann und warum es funktioniert.