J'avais l'habitude de faire du cherry-picking, mais j'ai découvert que j'avais parfois des problèmes mystérieux de temps en temps. J'ai trouvé un blog de Raymond Chen, un vétéran de 25 ans chez Microsoft, qui décrit certains scénarios où le cherry-picking peut poser des problèmes dans certains cas.
Une des règles de base est que si vous faites du cherry-picking d'une branche à une autre, puis fusionnez ultérieurement entre ces branches, il est probable que vous rencontriez des problèmes plus tôt ou plus tard.
Voici une référence aux blogs de Raymond Chen sur ce sujet: https://devblogs.microsoft.com/oldnewthing/20180312-00/?p=98215
Le seul problème que j'ai rencontré avec le blog de Raymond est qu'il n'a pas fourni d'exemple complet. Je vais donc essayer d'en fournir un ici.
La question ci-dessus demande comment fusionner uniquement le commit pointé par HEAD dans la branche a-good-feature avec master.
Voici comment cela se ferait:
- Trouvez l'ancêtre commun entre les branches master et a-good-feature.
- Créez une nouvelle branche à partir de cet ancêtre, nous l'appellerons nouvelle branche patch.
- Faites du cherry-pick d'un ou plusieurs commits dans cette nouvelle branche patch.
- Fusionnez la branche patch dans les deux branches master et a-good-feature.
- La branche master contiendra désormais les commits, et les branches master et a-good-feature auront également un nouvel ancêtre commun, ce qui résoudra tout problème futur si d'autres fusions sont effectuées ultérieurement.
Voici un exemple de ces commandes:
git checkout master...a-good-feature [checkout de l'ancêtre commun]
git checkout -b patch
git cherry-pick a-good-feature [ce n'est pas seulement le nom de la branche, mais aussi le commit que nous voulons]
git checkout master
git merge patch
git checkout a-good-feature
git merge -s ours patch
Il est peut-être bon de noter que la dernière ligne qui a été fusionnée dans la branche a-good-feature a utilisé la stratégie de fusion "-s ours". La raison en est que nous devons simplement créer un commit dans la branche a-good-feature qui pointe vers un nouvel ancêtre commun, et puisque le code est déjà dans cette branche, nous voulons nous assurer qu'il n'y a aucune chance de conflit de fusion. Cela devient plus important si le(s) commit(s) que vous fusionnez ne sont pas les plus récents.
Les scénarios et les détails entourant les fusions partielles peuvent devenir assez complexes, je vous recommande donc de lire les 10 parties du blog de Raymond Chen pour avoir une compréhension complète de ce qui peut mal tourner, comment l'éviter, et pourquoi cela fonctionne.
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