web-dev-qa-db-fra.com

git merge --no-commit vs git cherry-pick --no-commit

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?

33
whenov

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.

49
gturri

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.

9
Ahmed Siouani