Bien que l'opération git cherry-pick soit courante dans Git, ce n'est généralement pas la meilleure solution. Parfois, c'est le moindre de deux maux, mais je n'ai pas encore vu de situation où cela serait approprié.
Il s'agit de la première partie d'une série qui commence par expliquer pourquoi la copie est mauvaise, continue avec pourquoi c'est terrible, puis décrit comment obtenir le même résultat en utilisant la fusion. Je vais vous montrer comment appliquer cette technique lorsque vous devez effectuer une fusion rétroactive et lorsque vous souhaitez corriger la copie à fusion avant que quelque chose ne se produise.
Deux branches sont impliquées dans la copie: le donneur (d'où vient le commit) et le destinataire (où il est copié). Appelons-les respectivement maître et fonctionnalité. Pour simplifier, supposons que le commit que vous copiez contient le changement dans une seule ligne d'un seul fichier. Dans ce diagramme, chaque validation est marquée avec le contenu de cette ligne et la flèche en pointillé indique la copie (opération git cherry-pick
) elle-même.

, , .
- "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. , , , () , .
En bref, le problème: lorsque git cherry-pick
deux copies d'un commit apparaissent dans l'arborescence. Si au moins une de ses lignes change avant de fusionner ses copies, une collision non forcée se produira. De plus, cela peut arriver en une semaine ou un an. Cela signifie que celui qui le résoudra peut simplement ne pas avoir les ressources pour prendre la bonne décision (il n'a pas copié, l'équipe a complètement changé, etc.).
Cependant, tout cela à Santa Barbara pourrait empirer si le conflit ne se produisait pas!
Pourquoi? Continuez à lire dans la partie suivante.