La git cherry-pick <commit>commande vous permet de prendre un seul commit (de n'importe quelle branche) et, essentiellement, de le rebaser dans votre branche de travail.
Question: disons que commit Aest dérivé masteret que vous travaillez dessus, en créant des commits enfants Bvia E. Dites En'a qu'une ligne ajoutée à partir de D. Si vous êtes git cherry-pick Edans master, applique-t-il tous les changements de Aà Edans la masterbranche, ou n'applique-t-il que le changement de Dà E, à savoir, il ajoute seulement cette 1 ligne à master? Si le cas est le premier, comment puis-je réaliser le second? (à part copier et coller manuellement)
chharvey
7
git cherry-pick -n <commit> Si vous ne voulez pas que le cherry pick soit automatiquement engagé.
Ben Flynn
6
Si BranchA n'a pas été poussé vers une télécommande, vous pouvez réorganiser les commits en utilisant rebaseet ensuite simplement merge. Il est préférable d'utiliser mergeplus souvent rebaseque possible car il ne crée pas en double commits.
git checkout BranchA
git rebase -i HEAD~113
... reorder the commits so the 10 you want are first ...
git checkout BranchB
git merge [the 10th commit]
L'autre façon de déplacer le travail introduit d'une branche à une autre est de le sélectionner. Un cherry-pick dans Git est comme un rebase pour un seul commit. Il prend le patch qui a été introduit dans un commit et essaie de le réappliquer sur la branche sur laquelle vous vous trouvez actuellement. Ceci est utile si vous avez un certain nombre de commits sur une branche de sujet et que vous souhaitez en intégrer un seul, ou si vous n'avez qu'un seul commit sur une branche de sujet et que vous préférez le sélectionner avec précaution plutôt que d'exécuter le rebase. Par exemple, supposons que vous ayez un projet qui ressemble à ceci:
Si vous souhaitez extraire le commit e43a6 dans votre branche principale, vous pouvez exécuter
$ git cherry-pick e43a6
Finished one cherry-pick.
[master]: created a0a41a9: "More friendly message when locking the index fails."
3 files changed, 17 insertions(+), 3 deletions(-)
Cela extrait la même modification introduite dans e43a6, mais vous obtenez une nouvelle valeur SHA-1 de validation, car la date appliquée est différente. Maintenant, votre histoire ressemble à ceci:
Vous pouvez maintenant supprimer votre branche de sujet et supprimer les validations que vous ne vouliez pas intégrer.
Réponses:
La
git cherry-pick <commit>
commande vous permet de prendre un seul commit (de n'importe quelle branche) et, essentiellement, de le rebaser dans votre branche de travail.Le chapitre 5 du livre Pro Git l'explique mieux que moi , avec des diagrammes et autres. ( Le chapitre sur Rebasing est également une bonne lecture.)
Enfin, il y a quelques bons commentaires sur le choix de la cerise sur le gâteau vs fusion vs rebasage dans une autre question SO .
la source
A
est dérivémaster
et que vous travaillez dessus, en créant des commits enfantsB
viaE
. DitesE
n'a qu'une ligne ajoutée à partir deD
. Si vous êtesgit cherry-pick E
dansmaster
, applique-t-il tous les changements deA
àE
dans lamaster
branche, ou n'applique-t-il que le changement deD
àE
, à savoir, il ajoute seulement cette 1 ligne àmaster
? Si le cas est le premier, comment puis-je réaliser le second? (à part copier et coller manuellement)Si BranchA n'a pas été poussé vers une télécommande, vous pouvez réorganiser les commits en utilisant
rebase
et ensuite simplementmerge
. Il est préférable d'utilisermerge
plus souventrebase
que possible car il ne crée pas en double commits.la source
SOURCE: https://git-scm.com/book/en/v2/Distributed-Git-Maintaining-a-Project#Integrating-Contributed-Work
L'autre façon de déplacer le travail introduit d'une branche à une autre est de le sélectionner. Un cherry-pick dans Git est comme un rebase pour un seul commit. Il prend le patch qui a été introduit dans un commit et essaie de le réappliquer sur la branche sur laquelle vous vous trouvez actuellement. Ceci est utile si vous avez un certain nombre de commits sur une branche de sujet et que vous souhaitez en intégrer un seul, ou si vous n'avez qu'un seul commit sur une branche de sujet et que vous préférez le sélectionner avec précaution plutôt que d'exécuter le rebase. Par exemple, supposons que vous ayez un projet qui ressemble à ceci:
Si vous souhaitez extraire le commit e43a6 dans votre branche principale, vous pouvez exécuter
Cela extrait la même modification introduite dans e43a6, mais vous obtenez une nouvelle valeur SHA-1 de validation, car la date appliquée est différente. Maintenant, votre histoire ressemble à ceci:
Vous pouvez maintenant supprimer votre branche de sujet et supprimer les validations que vous ne vouliez pas intégrer.
la source