En ce qui concerne une gamme de commits, la sélection des cerises est n'était pas pratique.
Comme mentionné ci-dessous par Keith Kim , Git 1.7.2+ a introduit la possibilité de sélectionner une gamme de validations (mais vous devez toujours être conscient des conséquences de la sélection à la cerise pour une fusion future )
git cherry-pick "a appris à choisir une gamme de commits
(par exemple" cherry-pick A..B"et" cherry-pick --stdin")," git revert"; ils ne supportent pas le meilleur contrôle de séquençage" rebase [-i]".
damian commente et nous prévient:
Dans le cherry-pick A..Bformulaire " ", Adoit être plus ancien queB .
S'ils sont du mauvais ordre, la commande échouera silencieusement .
Si vous voulez choisir la plage à Btravers D( y compris) ce serait B^..D.
Voir " Git create branch from range of previous commits? " Comme illustration.
Comme le mentionne Jubobs dans les commentaires :
Cela suppose que ce Bn'est pas un commit racine; unknown revisionsinon, vous obtiendrez une erreur " ".
Remarque: à partir de Git 2.9.x / 2.10 (Q3 2016), vous pouvez sélectionner une plage de commit directement sur une branche orpheline (tête vide): voir " Comment faire d'une branche existante orpheline dans git ".
Réponse originale (janvier 2010)
Un rebase --ontoserait mieux, où vous rejouez la plage de validation donnée au-dessus de votre branche d'intégration, comme Charles Bailey l'a décrit ici .
(recherchez également "Voici comment vous transplanteriez une branche de sujet basée sur une branche à une autre" dans la page de manuel de git rebase , pour voir un exemple pratique de git rebase --onto)
Si votre branche actuelle est l'intégration:
# Checkout a new temporary branch at the current location
git checkout -b tmp
# Move the integration branch to the head of the new patchset
git branch -f integration last_SHA-1_of_working_branch_range
# Rebase the patchset onto tmp, the old location of integration
git rebase --onto tmp first_SHA-1_of_working_branch_range~1 integration
Cela rejouera tout entre:
- après le parent de
first_SHA-1_of_working_branch_range(d'où le ~1): le premier commit que vous souhaitez rejouer
- jusqu'à "
integration" (qui pointe vers le dernier commit que vous souhaitez rejouer, depuis la workingbranche)
à " tmp" (qui indique où integrationpointait auparavant)
En cas de conflit lors de la relecture de l'un de ces validations:
- soit le résoudre et exécuter "
git rebase --continue".
- ou ignorer ce correctif et exécuter à la place "
git rebase --skip"
- ou annuler le tout avec un "
git rebase --abort" (et remettre la integrationbranche sur la tmpbranche)
Après cela rebase --onto, integrationsera de retour au dernier commit de la branche d'intégration (c'est-à-dire " tmp" branche + tous les commits rejoués)
Avec la cueillette des cerises ou rebase --onto, n'oubliez pas que cela a des conséquences sur les fusions ultérieures, comme décrit ici .
Une cherry-picksolution " " pure est discutée ici et impliquerait quelque chose comme:
Si vous souhaitez utiliser une approche par patch, "git format-patch | git am" et "git cherry" sont vos options.
À l' heure actuelle, git cherry-pickaccepte un seul commit, mais si vous voulez choisir la plage Bpar Dce serait B^..Ddans git Lingo, donc
git rev-list --reverse --topo-order B^..D | while read rev
do
git cherry-pick $rev || break
done
Mais de toute façon, lorsque vous devez "rejouer" une série de validations, le mot "rejouer" devrait vous pousser à utiliser la fonctionnalité " rebase" de Git.