Y a-t-il une différence entre git merge --no-commit
et git cherry-pick --no-commit
?
Et y a-t-il une différence dans l'histoire si je valide après ces deux commandes?
Si vous vous engagez après git merge --no-commit
, vous obtiendrez un commit de fusion. Alors qu'après un git cherry-pick --no-commit
vous obtiendrez un commit avec un seul parent.
Par conséquent, oui, il y a une différence entre ces deux commandes.
En particulier, si vous avez quelque chose comme
A -- B -- C
\ L HEAD
\
-- D -- E
Si vous cherry-pick
commit E
, vous n'obtiendrez pas les modifications de commit D
. Alors que si vous merge
, vous obtiendrez les deux.
Alors que git-merge est utilisé pour joindre deux ou plusieurs historiques de développement, git-cherry-pick est utilisé pour appliquer les changements introduits par certaines validations existantes.
Ainsi, une fois que vous vous engagez après avoir effectué un git-merge , Git ajoutera ce qu'on appelle un merge commit . De l'autre côté, quand cherry-pick (ing) commits, git appliquera les changements introduits par ces commits au sommet de votre arbre de travail (il n'y a pas de fusion entre deux ou plusieurs branches). Autrement dit, les commits sont clonés et placés au-dessus de votre branche.
Jetez un œil à Git Cherry-pick vs Merge Workflow pour comprendre les différences basées sur les besoins réels d'un mainteneur de référentiel.