Während die Git-Cherry-Pick- Operation in Git üblich ist, ist sie normalerweise nicht die beste Lösung. Manchmal ist dies das kleinere von zwei Übeln, aber ich habe noch keine Situation gesehen, in der es angemessen wäre.
Dies ist der erste Teil einer Reihe, in dem zunächst erklärt wird, warum das Kopieren schlecht ist, warum es schrecklich ist, und anschließend beschrieben wird, wie Sie mit Merge das gleiche Ergebnis erzielen. Ich zeige Ihnen, wie Sie diese Technik anwenden, wenn Sie eine rückwirkende Zusammenführung durchführen müssen und wenn Sie das Kopieren von Zusammenführen korrigieren möchten, bevor etwas Schlimmes passiert.
Am Kopieren sind zwei Zweige beteiligt: der Spender (woher das Commit kommt) und der Empfänger (wo es kopiert wird). Nennen wir sie Master bzw. Feature. Nehmen wir der Einfachheit halber an, dass das Commit, das Sie kopieren, die Änderung nur in einer Zeile einer einzelnen Datei enthält. In diesem Diagramm ist jedes Commit mit dem Inhalt dieser Zeile markiert, und der gestrichelte Pfeil zeigt die Kopie (Operation git cherry-pick
) selbst an.

, , .
- "apple". , F1 feature, M1 master. , "apple". F2 feature, "berry", F2 master M2.
.
, :

3 master F3 feature. , "berry".
feature master. , , "berry".

, , , .
. F2 3 master F3 feature, F3 "cherry". , feature, , "cherry". , :

feature master . (three-way merge) "apple", feature "cherry", — "berry".
<<<<<<<<<< HEAD (master) berry ||||||||| merged common ancestors apple ========= cherry >>>>>>>>>> feature
, , . , .
, , , feature.
( , .). ?

, "apple". victim A V1, . V1 feature : F1 , "apple". master 1, .
. feature "berry" F2, master M2. "cherry" feature F3. master 3, , master "berry".
victim "-" feature master. V2 V3, "apple".
- , feature victim, V4 , "cherry" feature.
"" victim, master. ! : "" F2 M2. , , , () , .
Kurz gesagt, das Problem: Wenn git cherry-pick
zwei Kopien eines Commits im Baum angezeigt werden. Wenn sich mindestens eine der Zeilen vor dem Zusammenführen der Kopien ändert, tritt eine ungezwungene Kollision auf. Darüber hinaus kann dies in einer Woche oder einem Jahr geschehen. Dies bedeutet, dass derjenige, der das Problem lösen wird, möglicherweise nicht über die Ressourcen verfügt, um die richtige Entscheidung zu treffen (er hat nicht kopiert, das Team wurde vollständig geändert usw.).
All dies könnte sich jedoch verschlimmern, wenn der Konflikt nicht auftritt!
Warum? Lesen Sie weiter im nächsten Teil.