Illustration de la commande git cherry-pick

Git cherry-pick

git cherry-pick est une commande puissante qui permet de choisir des commits Git arbitraires par référence et de les ajouter au HEAD actuel. Elle correspond au fait de sélectionner un commit d'une branche et de l'appliquer à une autre. La commande git cherry-pick peut être utile pour annuler des changements. Par exemple, supposons qu'un commit soit accidentellement intégré à la mauvaise branche. Vous pouvez passer à la bonne branche, sélectionner le commit et l'insérer à l'endroit où il devrait se trouver.

Quand utiliser git cherry-pick ?

git cherry-pick est un outil utile, mais pas toujours une bonne pratique. La sélection de commit peut entraîner des duplications, et les merges traditionnels lui sont souvent préférés. Ceci dit, la commande git cherry-pick est pratique dans certains cas…

Collaboration entre équipes.

Il arrive souvent que les membres individuels d'une équipe travaillent dans le même code ou autour de celui-ci. Il se peut qu'une nouvelle fonctionnalité du produit comporte un composant backend et un composant frontend. Il est possible que du code soit partagé entre deux secteurs de produits. Le développeur du backend peut créer une structure de données que le frontend devra également utiliser. Le développeur du frontend pourrait utiliser la commande git cherry-pick pour sélectionner le commit dans lequel cette hypothétique structure de données serait créée. De la sorte, le développeur du frontend pourrait continuer à avancer dans sa partie du projet.

Hotfix de bug

Lorsqu'un bug est découvert, il est important de fournir une correction aux utilisateurs finaux aussi rapidement que possible. Par exemple, un développeur a commencé à travailler sur une nouvelle fonctionnalité. Au cours du développement de cette nouvelle fonctionnalité, il identifie un bug préexistant. Il crée un commit explicite pour le corriger. Le commit de ce nouveau patch peut être directement sélectionné dans la branche master pour corriger le bug avant qu'il ne touche plus d'utilisateurs.

Annulation de changements et restauration de commits perdus

Parfois, une branche de fonctionnalité (feature) peut devenir obsolète et ne pas être mergée dans la branche master. Parfois, une pull request peut être fermée sans être mergée. Git ne perd jamais ces commits, et il reste possible de les rechercher et de les ramener à la vie grâce à des commandes comme git log et git reflog.

Comment utiliser git cherry-pick ?

Pour illustrer l'utilisation de la commande git cherry-pick, imaginons que nous disposons d'un dépôt avec l'état de branche suivant :

    a - b - c - d   Master
         \
           e - f - g Feature

La commande git cherry-pick est utilisable directement et peut être exécutée comme suit :

git cherry-pick commitSha

Dans cet exemple, commitSha est une référence de commit. Vous pouvez trouver ces références grâce à la commande git log. Dans notre exemple, imaginons que nous souhaitions utiliser le commit `f` dans master. D'abord, nous vérifions que nous travaillons sur la branche principale (master).

git checkout master

Ensuite, nous exécutons la commande cherry-pick comme suit :

git cherry-pick f

Une fois la commande exécutée, notre historique Git ressemblera à ceci :

    a - b - c - d - f   Master
         \
           e - f - g Feature

Le commit f a bien été sélectionné dans la branche de fonctionnalité.

Exemples d'utilisations de git cherry-pick

La commande git cherry-pick peut également être transmise à certaines options d'exécution.

-edit

Lors de transmission de l'option -edit, Git appelle un message de commit avant d'appliquer l'opération cherry-pick.

--no-commit

L'option --no-commit exécutera la commande cherry-pick, mais au lieu de créer un commit, elle déplacera les contenus du commit cible dans le répertoire de travail de la branche actuelle.

--signoff

L'option --signoff ajoute une ligne de signature « signoff » à la fin du message de commit cherry-pick.

Outre ces options utiles, la commande git cherry-pick accepte également de nombreuses options de stratégie de merge. Découvrez-en plus sur ces options dans la documentation relative aux stratégies de merge git .

En outre, la commande git cherry-pick accepte également la saisie d'options pour la résolution des conflits de merge, ce qui inclut les options : --abort, --continue et --quit. Ces options sont couvertes de manière plus approfondie en ce qui concerne git merge et git rebase.

Résumé

La commande cherry-pick est efficace, pratique et incroyablement utile dans quelques scénarios. Elle ne doit pas être utilisée à la place de git merge ou de git rebase. La commande git log est requise pour trouver des commits à sélectionner.