Cherry picking sur Azure devops : Découverte et tutoriel complet

Auteur
Team Redac
Date de publication
May 24, 2023
Temps de lecture
5
m

Azure DevOps propose des fonctionnalités de cherry-picking, permettant de sélectionner des commits pour les transférer d'une branche à l'autre. Découvrez tout ce que vous devez savoir sur la commande Git cherry-pick, et comment l'utiliser sur le service cloud de Microsoft !

Au sein d'un groupe de programmeurs travaillant sur un même projet, il peut vite devenir difficile de gérer les changements effectués sur de multiples branches Git.

Cette méthode est très utile, notamment pour annuler des changements. C'est par exemple le cas si un commit est accidentellement effectué sur la mauvaise branche. Grâce à la technique du cherry-picking, il est possible de transférer le commit à la branche adéquate.

On l'utilise aussi pour déployer une fonctionnalité spécifique d'une branche à l'autre, ou pour appliquer une correction de bugs sur de multiples branches.

Il s'agit d'une pratique très courante pour les workflows Git, à tel point que le service Azure DevOps embarque une capacité de cherry-pick. Elle permet de sélectionner des commits sur une « pull request » afin de les transférer sur une nouvelle branche directement depuis un navigateur. Découvrez tout ce que vous devez savoir.

Qu'est-ce que la commande git cherry-pick ?

L'une des commandes Git les plus puissantes est « cherry-pick ». Elle permet de prendre un ou plusieurs commits et d'appliquer chaque changement sous forme de nouveau commit sur une branche différente.

Ceci permet de sélectionner des commits spécifiques et de les transférer plutôt que de combiner l'intégralité d'une branche. Le terme « cherry-picking » fait référence à la cueillette de cerises, précise et minutieuse.

La commande git cherry-pick permet de copier un ou plusieurs commits sélectionnés depuis n'importe quelle branche vers une branche cible. Pour chaque commit de branche source choisie, Git créé un commit correspondant sur la branche cible.

Il s'agit d'une alternative aux commands git merge et git rebase, permettant de combiner tous les commits d'une branche. Au contraire, la commande cherry-pick permet de sélectionner des commits individuels pour l'intégration.

À quoi sert git cherry-pick ?

La commande git cherry-pick s'avère utile dans une large variété de situations. Voici un tour d'horizon de ses principaux cas d'usage.

Il s'agit tout d'abord d'un précieux atout pour la collaboration. Au sein d'une même équipe, il est fréquent que plusieurs membres travaillent individuellement sur le même code. Une fonctionnalité du produit peut avoir un composant backend et un composant frontend, et un même code peut être partagé entre deux secteurs du produit.

Par exemple, un développeur backend peut créer une structure de données dont le frontend a aussi besoin. Dans ce cas de figure, le développeur frontend peut utiliser git cherry-pick pour sélectionner le commit dans lequel cette structure de données a été créée. Dès lors, il pourra continuer à avancer sur sa partie du projet.

Un autre cas d'usage est la correction rapide de bugs. Par exemple, il arrive qu'un développeur travaillant sur une nouvelle fonctionnalité identifie un bug pré-existant. Il peut alors créer un patch sous forme de commit, et le cherry-picking permet de l'appliquer à la branche principale avant que le bug affecte davantage d'utilisateurs.

Enfin, le cherry-picking permet d'annuler des changements ou de restaurer des commits perdus. Ceci s'avère par exemple utile lorsqu'une branche de fonctionnalité n'a pas été fusionnée avec la branche principale, ou quand une requête pull est fermée sans fusion. Les commandes git log et git reflog permettent de restaurer de tels commits.

Cherry-pick sur Azure Repos

Azure Repos propose une prise en charge limitée du cherry-picking, uniquement pour créer une requête pull afin d'appliquer un correctif à une branche cible.

L'option cherry-pick dans le menu de requête pull permet de créer une nouvelle branche à partir de la branche cible de requête pull. Elle sélectionne ensuite tous les changements de la branche source de requête pull et les applique à la nouvelle branche. L'utilisateur est ensuite invité à créer une nouvelle requête pull pour fusionner la nouvelle branche avec une autre branche cible.

Une extension pour le multi-cherry-pick

Pour simplifier le cherry-pick des commits d'une pull request vers de multiples branches en une seule fois, Microsoft a ajouté une nouvelle option. Pour chaque branche sélectionnée, une nouvelle branche est créée avec les changements appliqués. Si l'option pull request est sélectionnée, une requête sera ouverte sur la branche cible.

Il suffit d'installer l'extension PR Multi-Cherry-Pick développée par Microsoft DevLabs depuis la marketplace Visual Studio. Naviguez vers votre requête de tirage, sélectionnez le menu de contexte et l'option multi-cherry-pick. Ajoutez autant de cibles que vous le souhaitez, et validez. Une page de synthèse s'affiche avec les liens vers les branches et les pull-requests créées par l'outil.

Cette extension est idéale pour les flux de travail nécessitant l'application des commits sur de multiples destinations. Il s'agit d'un outil open source, et vous pouvez contribuez sur sa page GitHub officielle.

Comment faire de la gestion de version Git sur Visual Studio

La prise en charge du cherry-picking par Visual Studio varie d'une version à l'autre. Sur Visual Studio 2022 et 2019, on retrouve une expérience de gestion de version Git avec le menu Git, les changements Git et les menus contextuels de l'Explorateur de Solutions.

Il suffit de sélectionner l'option Git > Gestion des branches pour ouvrir la fenêtre de Dépôt Git. On effectue ensuite un clic droit sur la branche cible, pour choisir l'option « Checkout ».

Dans la liste des Branches, effectuez un clic droit sur la branche source et choisissez « Voir l'Historique » pour ouvrir un onglet d'historique des commits. Dans cet onglet, faites un clic droit sur le commit de votre choix et choisissez l'option Cherry-Pick.

Notons que Visual Studio ne permet le cherry-picking que d'un commit à la fois. Il est donc nécessaire de répéter l'opération pour chaque commit à cueillir.

Un nouveau commit est créé sur la branche cible, contenant tous les changements du commit sélectionné. Si l'opération de cherry-pick ne se déroule pas comme prévu, vous serez notifié par le logiciel.

En guise d'alternative, à partir de la version 16.8, Visual Studio 2019 propose à la fois la gestion de version Git et l'interface Git Team Explorer. Pour l'utiliser, rendez-vous dans Outils > Options > Prévisualiser les fonctionnalités > Nouvelle expérience utilisateur Git depuis la barre de menu.

Dans le Team Explorer, cliquez sur le bouton d'accueil et choisissez les Branches. Effectuez ensuite un clic droit sur la branche cible, et sélectionnez l'option « Checkout ». Faites ensuite un clic droit sur la branche source, et choisissez « Voir l'Historique » pour ouvrir un onglet d'historique des commits.

Au sein de l'onglet d'historique, faites un clic droit sur le commit à sélectionner et choisissez l'option Cherry-Pick. Là encore, il est nécessaire de répéter l'opération pour chaque commit.

Cherry-pick avec l'invite de commandes Git

Le cherry-pick peut être effectué avec l'invite de commande de Git. Utilisez tout d'abord la commande git log pour afficher la liste des commits de la branche source. Le drapeau « --oneline » est une abréviation des informations du commit.

Depuis la console, entrez la commande : « git log --oneline <source branch> ». Les commits les plus récents sont affichés en premier, et chacun est identifié par un hash partiel SHA-1.

Notez l'identifiant du commit que vous souhaitez cueillir, et vérifiez la branche cible avec la commande « git checkout <target branch> ». Vous pouvez choisir de soumettre ou de supprimer les changements qui n'ont pas encore été soumis.

Pour le cherry-pick d'un unique commit, utilisez la commande « git cherry-pick <commit ID> ». Pour le cherry-pick de multiples commits, séparez les identifiants par des espaces : « git cherry-pick <commit1 ID> <commit2 ID> <commit3 ID> ». Les commits sont appliqués dans l'ordre dans lequel ils sont entrés.

Si vous voulez sélectionner une gamme de commits spécifique, utilisez la notation dot range : « git cherry-pick <oldest-commit ID>^..<newest-commit ID> ».

Lors du cherry-picking de multiples commits, la commande par défaut crée une séquence correspondante de nouveaux commits de branche cible. Pour ne pas soumettre les changements de la branche cible, utilisez le drapeau -n : « git cherry-pick -n <commit1 ID> <commit2 ID> ».

Vous pouvez ensuite créer manuellement un commit unique contenant tous les changements à partir de l'opération de cherry-pick. En cas de conflit de fusion, vous serez notifié par Git. Il est possible de résoudre les conflits et d'exécuter « git cherry-pick --continue » ou de lancer « git cherry-pick --abort » pour annuler.

Comment effectuer un cherry-pick à partir d'une requête de tirage complétée ?

Il est possible d'effectuer le cherry-pick de changements à partir d'une requête de tirage complétée. Depuis la page de vue d'ensemble de pull request, sélectionnez l'option cherry-pick.

Pour copier les changements depuis une requête active, choisissez cherry-pick dans le menu « plus d'options ». Cette action permet de créer une nouvelle branche avec les changements copiés. Il est ensuite possible de créer une nouvelle requête de tirage depuis cette nouvelle branche.

Conclusion : Azure DevOps simplifie le cherry-pick

À l'aide de l'interface Azure DevOps, l'utilisation de la commande Git cherry-pick est fortement simplifiée. De plus, l'extension multi-cherry-pick facilite la copie de commits vers de multiples branches.

Le cherry-pick est l'une des nombreuses techniques DevOps. Afin de maîtriser tous les aspects de cette méthodologie et les outils comme Azure DevOps, vous pouvez choisir DevU.

Notre formation à distance permet d'acquérir toutes les compétences requises pour exercer le métier d'ingénieur DevOps. Découvrez DevU dès maintenant !

Vous savez tout sur le cherry-picking sur Azure DevOps. Pour plus d'informations sur le même sujet, découvrez notre dossier sur Azure DevOps Pipelines et notre dossier sur Git.

Omnes education logo

OMNES Education est une institution privée d'enseignement supérieur et de recherche interdisciplinaire, implantée à Beaune, Bordeaux, Chambéry, Lyon, Rennes et Paris. Avec ses campus à Abidjan, Barcelone, Genève, Londres, Monaco, Munich, Montreux et San Francisco, OMNES Education occupe une place unique dans le paysage éducatif français.

15
[Écoles]
200 000
[Alumni]
3 000
[Experts]
40 000
[Étudiants]
20
[Campus en France et à l’étranger]
Management
Ingénieurs
Communication
Sciences politiques et Relations internationales
Création et design