J'ai BranchA
qui est en avance de 113 commits par rapport à BranchB
.
Mais je veux seulement les 10 derniers commits environ de BranchA
fusionnés dans BranchB
.
Y a-t-il un moyen de faire cela?
J'ai BranchA
qui est en avance de 113 commits par rapport à BranchB
.
Mais je veux seulement les 10 derniers commits environ de BranchA
fusionnés dans BranchB
.
Y a-t-il un moyen de faire cela?
La commande git cherry-pick
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 je ne pourrais le faire, avec des diagrammes et autres. (Le chapitre sur le rebasage est également une bonne lecture.)
Enfin, il y a quelques bons commentaires sur le cherry-picking par rapport au merging et rebasing dans une autre question SO.
Question: dire que le commit A
est basé sur la branche master
et que vous travaillez dessus, créant des commits enfants B
à travers E
. Disons que E
n'a qu'une seule ligne ajoutée depuis D
. Si vous faites un git cherry-pick E
dans la branche master
, est-ce qu'il applique tous les changements de A
à E
dans la branche master
, ou est-ce qu'il n'applique que le changement de D
à E
, c'est-à-dire, il ajoute seulement cette 1 ligne à master
? Si c'est le premier cas, comment puis-je obtenir le second? (à part en copiant et collant manuellement)
SOURCE: https://git-scm.com/book/fr/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 faire un cherry-pick. 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. Cela est utile si vous avez un certain nombre de commits sur une branche de sujet et que vous voulez intégrer un seul d'entre eux, ou si vous n'avez qu'un seul commit sur une branche de sujet et que vous préféreriez le cherry-pick plutôt que de lancer un rebase. Par exemple, supposez que vous avez un projet qui ressemble à ceci:
Si vous voulez extraire le commit e43a6 dans votre branche master, vous pouvez exécuter
$ git cherry-pick e43a6
Terminé un cherry-pick.
[master]: créé a0a41a9: "Message plus convivial lorsque le verrouillage de l'index échoue."
3 fichiers modifiés, 17 insertions(+), 3 suppressions(-)
Cela extrait le même changement introduit dans e43a6, mais vous obtenez une nouvelle valeur de hachage SHA-1 de commit, car la date d'application est différente. Maintenant votre historique ressemble à ceci:
Maintenant vous pouvez supprimer votre branche de sujet et abandonner les commits que vous ne vouliez pas extraire.
Vous pourriez choisir les commits souhaités.
J'ai trouvé ce Comment choisir plusieurs commits
Je ferais la réponse acceptée.
Si BranchA n'a pas été poussé vers un distant, vous pouvez réorganiser les commits en utilisant rebase
puis simplement merge
. Il est préférable d'utiliser merge
plutôt que rebase
lorsque c'est possible car cela ne crée pas de commits en double.
git checkout BranchA
git rebase -i HEAD~113
... réorganisez les commits pour mettre en premier ceux que vous souhaitez ...
git checkout BranchB
git merge [le 10ème commit]
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
6 votes
Possible duplicate of Comment fusionner un commit spécifique dans git