Les réponses principales décrivent comment appliquer les modifications depuis un commit spécifique sur la branche actuelle. Si c'est ce que vous entendez par "comment fusionner", alors utilisez simplement cherry-pick comme ils le suggèrent.
Mais si vous voulez vraiment une fusion, c'est-à-dire que vous voulez un nouveau commit avec deux parents -- le commit existant sur la branche actuelle et le commit dont vous vouliez appliquer les modifications -- alors un cherry-pick ne permettra pas cela.
Avoir un historique de fusion véritable peut être souhaitable, par exemple, si votre processus de build utilise l'ascendance git pour définir automatiquement les chaînes de versions en se basant sur la dernière balise (en utilisant git describe
).
Au lieu de cherry-pick, vous pouvez effectuer une réelle fusion git --no-commit
, puis ajuster manuellement l'index pour supprimer les modifications indésirables.
Supposons que vous êtes sur la branche A
et que vous voulez fusionner le commit à la pointe de la branche B
:
git checkout A
git merge --no-commit B
Maintenant vous êtes prêt à créer un commit avec deux parents, les commits de pointe actuels de A
et B
. Cependant, vous pouvez avoir plus de modifications appliquées que ce que vous voulez, y compris des modifications des commits antérieurs sur la branche B. Vous devez annuler ces modifications indésirables, puis commettre.
(Il peut y avoir une manière facile de remettre l'état du répertoire de travail et de l'index comme il était avant la fusion, afin que vous ayez une base propre sur laquelle cherry-pick le commit que vous vouliez au départ. Mais je ne sais pas comment obtenir cette base propre. git checkout HEAD
et git reset HEAD
supprimeront tous les états de fusion, contredisant le but de cette méthode.)
Donc annulez manuellement les modifications indésirables. Par exemple, vous pourriez
git revert --no-commit 012ea56
pour chaque commit indésirable 012ea56
.
Lorsque vous avez terminé d'ajuster les choses, créez votre commit:
git commit -m "Fusion du commit 823749a de B qui a modifié le code de délai d'attente"
Maintenant, vous n'avez que la modification désirée, et l'arbre de l'ascendance montre que vous avez techniquement fusionné depuis B.
0 votes
Si vous essayez de faire cela par rapport à GitHub, cet article vous guidera à travers cela. markosullivan.ca/how-to-handle-a-pull-request-from-github