À quoi sert Git Cherry Pick et quand devriez-vous l’utiliser ?
git cherry-pick
est un outil simple mais puissant qui vous permet de transférer sélectivement des commits d’une branche à une autre. Vous pouvez l’utiliser lorsque vous ne souhaitez pas fusionner une branche entière dans master, mais souhaitez quand même inclure les modifications d’une branche de fonctionnalité.
Sommaire
Qu’est-ce que Git Cherry Pick et comment ça marche ?
Dans Git, les commits sont les unités qui suivent les changements au fil du temps. Chaque commit peut représenter un correctif de bogue, une nouvelle fonctionnalité ou une partie d’une solution plus large. Vous pouvez imaginer que les commits sont stockés sous forme de liste chaînée remontant dans le temps ; chaque fois que vous modifiez votre branche HEAD, Git reconstruit vos fichiers de répertoire local en prenant en compte tous les commits remontant au début.
C’est une simplification bien sûr, et Git ne stocke pas techniquement les commits sous forme de simples listes de modifications, il utilise des blobs basés sur des fichiers, mais le principe est le même.
Les choses se compliquent lorsque les succursales s’impliquent. Souvent, le travail sur une fonctionnalité prend plusieurs jours ou semaines. Plutôt que d’encombrer le référentiel principal, il entre dans une branche de fonctionnalité distincte, puis le code est revu et fusionné. La fusion consiste essentiellement à créer une branche de cet historique de validation de sorte que l’intégralité de la branche de fonctionnalité soit incluse lorsque Git fait son travail.
Cependant, que se passe-t-il si vous souhaitez fusionner certaines choses, mais ne voulez pas que toute la branche soit incluse pour l’instant ? Tu ne peux pas faire git merge
dans ce cas.
C’est ici que git cherry-pick
devient utile. Il fait ce que son nom l’indique : prend un seul commit de la branche de fonctionnalité, le sélectionne individuellement et l’applique à la branche principale, ou vice versa. Cela copie le commit, de sorte qu’il y ait un tout nouveau commit sur la branche cible.
Notez qu’il n’y a pas de véritable « ligne » reliant le nouveau commit sur la branche master à l’ancien commit. Le nouveau commit trié sur le volet créé sur master ne fait pas du tout référence au commit source, le commit est simplement copié. Git s’en occupera lorsque vous fusionnerez à nouveau les branches, car les commits sont considérés comme des copies les uns des autres.
En effet, le commit est « transféré » vers la nouvelle branche, bien que vous deviez garder à l’esprit que l’ancien commit est toujours appliqué à la branche de fonctionnalité. Cependant, vous ne voudriez pas annuler le commit source, car cela entraînerait des problèmes lors de la fusion ultérieure.
Pourquoi Cherry Pick?
Il existe quelques cas d’utilisation pour cela. Peut-être que vous travaillez sur une fonctionnalité et qu’elle n’est pas prête à être publiée, mais vous avez corrigé un bogue sur la branche de fonctionnalité que vous aimeriez intégrer à votre version hebdomadaire. Vous pouvez utiliser cherry-pick pour copier le correctif de bogue sur Master afin de le déployer tôt.
Ou peut-être avez-vous plusieurs branches pour la production et le développement, et vous souhaitez copier un correctif de bogue urgent de la production au développement. La cueillette de cerises peut le faire aussi.
Ou vous avez peut-être même accidentellement fait un commit dans la mauvaise branche. Vous pouvez utiliser git cherry-pick
pour le copier sur celui de droite, puis git reset
pour annuler ce commit (à condition qu’il soit à la tête de la branche).
Utiliser Git Cherry Pick
Une fois que vous comprenez ce que vous faites, git cherry-pick
est assez simple à utiliser.
Le moyen le plus simple d’afficher l’historique des commits de Git sur la ligne de commande est d’utiliser la commande suivante, qui affiche tous les commits mais avec un historique des branches et des fusions, ce qui est crucial pour l’utilisation de cherry-pick :
git log --pretty=format:"%h %s" --graph
Ensuite, vous pouvez simplement copier le hachage SHA1 du commit et exécuter le cherry pick :
git cherry-pick 1da76d3
Notez que vous pouvez également sélectionner plusieurs commits en même temps, il suffit de transmettre plusieurs hachages.
git cherry-pick
a quelques options utiles:
--no-commit
applique uniquement les modifications à votre répertoire. Vous devrez mettre en scène et valider manuellement.--edit
vous permettra de modifier le message de validation.-x
ajoutera un message disant « cerise cueillie dans le commit : … »
Bien sûr, si vous utilisez un client Git basé sur une interface graphique comme Fork ou GitKraken, que nous recommandons fortement, vous pouvez simplement cliquer avec le bouton droit sur le commit et choisir de le sélectionner :