Les principales réponses décrivent comment appliquer les modifications d' une validation spécifique à la branche actuelle. Si c'est ce que vous entendez par «comment fusionner», utilisez simplement la sélection de cerises comme ils le suggèrent.
Mais si vous voulez réellement une fusion , c'est-à-dire que vous voulez un nouveau commit avec deux parents - la validation existante sur la branche actuelle et la validation à partir de laquelle vous vouliez appliquer des modifications - alors une sélection de cerise ne fera pas cela.
Avoir un véritable historique de fusion peut être souhaitable, par exemple, si votre processus de génération tire parti de l'ascendance git pour définir automatiquement les chaînes de version en fonction de la dernière balise (à l'aide git describe
).
Au lieu de choisir, vous pouvez faire un réel git merge --no-commit
, puis ajuster manuellement l'index pour supprimer les modifications que vous ne souhaitez pas.
Supposons que vous soyez sur une branche A
et que vous souhaitiez fusionner le commit à l'extrémité de la branche B
:
git checkout A
git merge --no-commit B
Maintenant, vous êtes configuré pour créer un commit avec deux parents, le conseil actuel valide A
etB
. Cependant, vous pouvez avoir appliqué plus de modifications que vous le souhaitez, y compris les modifications apportées par des validations antérieures sur la branche B. Vous devez annuler ces modifications indésirables, puis valider.
(Il peut y avoir un moyen facile de rétablir l'état du répertoire de travail et de l'index tel qu'il était avant la fusion, de sorte que vous ayez une table blanche sur laquelle choisir le commit que vous vouliez en premier lieu. Mais Je ne sais pas comment obtenir cette table rase git checkout HEAD
et git reset HEAD
supprimera tous les deux l'état de fusion, ce qui ira à l'encontre du but de cette méthode.)
Annulez donc 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 "Merge in commit 823749a from B which tweaked the timeout code"
Maintenant, vous n'avez que le changement que vous vouliez, et l'arbre d'ascendance montre que vous avez fusionné techniquement à partir de B.