Mettre à jour le code avec récupération (fetch), fusion et extraction

Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2019

Visual Studio 2019 | Visual Studio 2022

Lorsqu’il existe plusieurs contributeurs à un projet, gardez votre référentiel Git local à jour en téléchargeant et en intégrant le travail chargé par d’autres personnes dans le référentiel distant du projet. Ces commandes Git mettent à jour votre référentiel local :

  • Git récupération (fetch) télécharge toutes les nouvelles validations chargées par d’autres personnes dans le référentiel distant. Les branches de suivi à distance dans le cache du référentiel local sont mises à jour. Les branches locales restent inchangées.
  • La fusion Git intègre les validations d’une ou plusieurs branches sources dans une branche cible.
  • Git rebase intègre les validations d’une branche source dans une branche cible, mais en utilisant une stratégie différente de la fusion Git.
  • Git tirage (pull) effectue une récupération, puis une fusion ou un rebase pour intégrer les validations récupérées dans votre branche locale actuelle.

Visual Studio utilise un sous-ensemble de ces commandes Git lorsque vous synchronisez votre référentiel local avec un référentiel distant.

Pour obtenir une vue d’ensemble du flux de travail Git, consultez le tutoriel Git Azure Repos.

Cet article fournit des procédures pour les tâches suivantes :

  • Télécharger les modifications avec fetch
  • Mettre à jour les branches avec fusion ou rebase
  • Télécharger les modifications et mettre à jour les branches avec tirage (pull)

Télécharger les modifications avec récupération (fetch)

Git fetch télécharge les validations de branche distante et les objets de fichier référencés qui n’existent pas dans votre référentiel local et met à jour les branches de suivi à distance dans le cache du référentiel local. Les branches de suivi à distance sont des copies locales des branches distantes, en lecture seule et mises en cache, et ne constituent pas vos branches locales. Git fetch ne met pas à jour vos branches locales. Par exemple, si un référentiel distant désigné par origin présente une branche bugfix3, Git fetch met à jour la branche de suivi à distance nommée origin/bugfix3 et non votre branche localebugfix3. Vous pouvez utiliser des branches de suivi à distance pour :

  • Comparer une branche de suivi à distance avec une branche locale pour passer en revue les modifications récupérées.
  • Fusionner une branche de suivi à distance dans une branche locale.
  • Créer une branche locale à partir d’une branche de suivi à distance.

Visual Studio 2022 offre une expérience de contrôle de version Git à l’aide du menu Git, des modifications Git et des menus contextuels dans l’Explorateur de solutions. Visual Studio 2019 version 16.8 offre également l’interface utilisateur Git de Team Explorer. Pour plus d’informations, consultez l’onglet Visual Studio 2019 - Team Explorer.

  1. Dans la fenêtre Modifications Git, choisissez Récupération (fetch). Sélectionnez ensuite sortant/entrant pour ouvrir la fenêtre Référentiel Git.

    Capture d’écran des boutons Récupérer (fetch) et lien entrant dans la fenêtre Modifications Git de Visual Studio 2019.

    Vous pouvez également choisir Récupération (fetch) dans le menu Git.

    Capture d’écran de l’option Récupération (fetch) dans le menu Git de Visual Studio 2019.

  2. Dans la fenêtre Référentiel Git, les validations récupérées s’affichent dans la section Entrant. Sélectionnez une validation récupérée pour afficher la liste des fichiers modifiés dans cette validation. Sélectionnez un fichier modifié pour afficher une vue diff du contenu modifié.

    Capture d’écran du menu du référentiel Git dans Visual Studio 2019.

Conseil

Fetch ne supprime pas les branches de suivi à distance dans le cache de votre référentiel local sans équivalent distant. Pour configurer Visual Studio de manière à nettoyer les branches de suivi à distance obsolètes pendant une récupération (fetch) :

  • Sélectionnez Outils>Options>Contrôle de code source>Paramètres globaux Git.
  • Définissez l’option Nettoyer les branches distantes pendant la récupération (fetch) sur True.

Après une Récupération (fetch) Git, vous pouvez comparer une branche locale avec sa branche de suivi à distance correspondante pour apercevoir les changements réalisés sur la branche distante. Si vous décidez de mettre à jour votre branche locale actuelle avec les modifications récupérées, vous pouvez effectuer une fusion ou un rebase Git. Vous pouvez également exécuter Git tirage (pull), associant une récupération (fetch) Git avec une fusion ou un rebase Git. La fusion Git et le rebase Git mettent à jour une branche cible en lui appliquant des validations à partir d’une branche source. Toutefois, la fusion Git et le rebase Git utilisent des stratégies différentes. Pour plus d’informations, consultez Mettre à jour les branches avec la fusion ou le rebase et Quand rebaser vs fusionner.

Mettre à jour les branches avec fusion ou rebase

Git fusion et Git rebase intègrent les validations d’une branche source dans votre branche locale actuelle (branche cible). La fusion Git effectue une fusion en avance rapide ou sans avance rapide. La fusion sans avance rapide est également appelée fusion triple ou fusion vraie. Rebase Git est un autre type de fusion. Ces types de fusion sont présentés dans le diagramme suivant.

Diagramme affichant les validations antérieures et ultérieures lors de l’utilisation de fusion et rebase.

La fusion Git et le rebase Git sont largement utilisés dans le workflow Git. Lorsque vous travaillez sur une fonctionnalité locale ou une branche de correction de bogues, il est courant de :

  1. Conserver votre branche locale main actuelle avec son équivalent distant en tirant régulièrement pour récupérer et fusionner les validations distantes.
  2. Intégrer les mises à jour de branche locale main dans votre branche de fonctionnalité locale à l’aide d’un rebase ou d’une fusion.
  3. Enregistrer votre travail sur la branche de fonctionnalité locale en latransmettant à la branche distante correspondante.
  4. Une fois la fonctionnalité terminée, créez une requête de tirage pour fusionner vos branches de fonctionnalité distantes dans la branche distantemain.

Cette approche vous aide à :

  • Rester informé des travaux récents d’autres personnes susceptibles d’affecter votre travail.
  • Résoudre rapidement les conflits entre votre travail et celui d’autres personnes.
  • Appliquer votre nouvelle fonctionnalité en plus du contenu de projet à jour.
  • Obtenir une révision de requête de tirage de votre travail.

Fusionner

Pour la fusion Git, si le conseil de la branche cible existe dans la branche source, le type de fusion par défaut sera une fusion à avance rapide. Sinon, le type de fusion par défaut sera une fusion sans avance rapide.

Une fusion à avance rapide ne peut jamais présenter de conflit de fusion, puisque Git n’applique aucune fusion à avance rapide si l’extrémité de la branche cible a divergé de la branche source. Par défaut, Git utilise une fusion rapide dans la mesure du possible. Par exemple, Git applique une fusion à avance rapide sur une branche locale que vous mettez à jour uniquement en extrayant sur sa branche équivalente distante.

Une fusion Git sans avance rapide génère une nouvelle « validation de fusion » de branche cible intégrant les modifications de branche source avec les modifications de branche cible. Les modifications applicables sont celles effectuées suite à la dernière validation commune aux deux branches. Dans le diagramme précédent, la validation C constitue la dernière validation commune dans les deux branches. Si un changement de branche source est en conflit avec un changement de branche cible, Git vous invite à résoudre le conflit de fusion. La validation de fusion (L) contient les modifications de branche source et de branche cible intégrées. Les conseils de branche source et cible (K et E) sont les parents de la validation de fusion. Dans l’historique de validation de votre branche, une validation de fusion est un marqueur utile pour une opération de fusion et indique clairement les branches fusionnées.

La fusion et le rebase Git modifient uniquement la branche cible ; la branche source reste inchangée. Lorsque vous rencontrez un ou plusieurs conflits de fusion, vous devez les résoudre pour terminer la fusion ou le rebase. Vous pouvez également annuler l’opération de fusion et retourner la branche cible à son état antérieur.

Pour plus d’informations concernant les options et stratégies de fusion, consultez le manuel de référence Git et les stratégies de fusion Git.

Conseil

Si la branche source est une branche de suivi à distance, assurez-vous de la mise à jour de la branche en exécutant une récupération Git avant une fusion.

  1. Choisissez Git > Gérer les branches dans la barre de menus pour ouvrir la fenêtre Référentiel Git .

    Capture d'écran de l'option Gérer les branches dans le menu Git de Visual Studio 2019.

  2. Dans la fenêtre Référentiel Git, cliquez avec le bouton droit sur la branche cible, puis sélectionnez Extraction.

    Capture d'écran de l'option de validation figurant dans la fenêtre Référentiel Git de Visual Studio 2019.

  3. Cliquez ensuite avec le bouton droit sur la branche source et sélectionnez Fusionner <la branche source> dans <la branche cible>.

    Capture d'écran de l'option de fusion figurant dans la fenêtre Référentiel Git de Visual Studio 2019.

  4. Visual Studio affiche un message de confirmation à la suite d’une fusion réussie.

    Capture d'écran du message de confirmation de fusion, figurant dans la fenêtre Référentiel Git de Visual Studio 2019.

    Si la fusion est interrompue en raison de conflits de fusion, Visual Studio vous en informera. Dans ce cas, vous pouvez résoudre les conflits ou annuler la fusion et revenir à l’état de pré-fusion.

    Capture d'écran du message de conflit de fusion, figurant dans la fenêtre Référentiel Git de Visual Studio 2019.

Rebase

Git rebase réordonne l’historique des validations de la branche cible de manière à contenir toutes les validations de branche source, suivies de toutes les validations de branche cible depuis la dernière validation commune. Autrement dit, un Git rebase reproduit les changements dans votre branche cible au-delà de l'historique de la branche source. Si un changement de branche source est en conflit avec un changement de branche cible, Git vous invite à résoudre le conflit de fusion. Le rebase Git ne crée aucune validation de fusion. Notamment, Git rebase modifie la séquence des validations de branche cible existantes, ce qui n’est pas le cas pour les autres stratégies de fusion. Dans le diagramme précédent, la validation K' contient les mêmes modifications que K, mais avec un nouvel ID de validation, puisqu’il renvoie à la validation E au lieu de C.

Git rebase modifie uniquement la branche cible ; la branche source reste inchangée. Lorsque vous rencontrez un ou plusieurs conflits de fusion, vous devez les résoudre pour terminer le rebase. Vous pouvez également annuler l’opération de rebase et retourner la branche cible à son état antérieur.

Si vous êtes la seule personne à travailler sur votre branche de fonctionnalité ou de correction de bogue, envisagez d’utiliser le rebase Git pour y intégrer de nouvelles validations de branche main. Sinon, utilisez la fusion Git. Pour plus d’informations sur le rebase Git et quand l’utiliser, consultez Appliquer des modifications avec rebase et Rebase vs fusion.

Conseil

Si la branche source est une branche de suivi à distance, assurez-vous de la mise à jour de la branche en exécutant une récupération (fetch) Git avant le rebase.

  1. Choisissez Git > Gérer les branches pour ouvrir la fenêtre Référentiel Git .

    Capture d'écran de l'option Gérer les branches dans le menu Git de Visual Studio 2019.

  2. Dans la fenêtre Référentiel Git, cliquez avec le bouton droit sur la branche cible, puis sélectionnez Extraction.

    Capture d'écran de l'option de validation figurant dans le menu contextuel de la branche, dans la fenêtre Référentiel Git de Visual Studio 2019.

  3. Cliquez avec le bouton droit sur la branche source, puis sélectionnez Rebase <Branche cible> sur <Branche source>.

    Capture d'écran de l'option Rebase figurant dans le menu contextuel de la branche, dans la fenêtre Référentiel Git de Visual Studio 2019.

  4. Visual Studio affiche un message de confirmation après un rebase réussi.

    Capture d'écran du message de confirmation Rebase, figurant dans la fenêtre Référentiel Git de Visual Studio 2019.

    Si le rebase est arrêté en raison de conflits de fusion, Visual Studio vous en informera. Vous pouvez résoudre les conflits ou annuler le rebase et revenir à l’état de pré-rebase.

    Capture d'écran du message de conflit rebase, figurant dans la fenêtre Référentiel Git de Visual Studio 2019.

Télécharger les modifications et mettre à jour les branches avec tirage (pull)

Par défaut, git pull combine une récupération (fetch) Git et une fusion Git pour mettre à jour votre branche locale actuelle à partir de son équivalent distant. Si vous le souhaitez, Git tirage (pull) peut effectuer un rebase Git au lieu d’une fusion Git.

Contrairement à Git récupération (fetch), Git tirage (pull) met à jour votre branche locale actuelle immédiatement après le téléchargement de nouvelles validations à partir du référentiel distant. Utilisez Git tirage (pull) lorsque vous souhaitez mettre à jour votre branche locale actuelle juste après une récupération (fetch) Git.

Conseil

Pour configurer Visual Studio pour un rebase au lieu d’une fusion lorsque vous tirez :

  1. Du menu Git, accédez à Outils>Options>Contrôle de code source>Paramètres globaux Git.
  2. Définissez l’option Rebaser la branche locale lors du tirage (pull) sur True.
  1. Dans la fenêtre Modifications Git, choisissez Tirage (pull).

    Capture d’écran du bouton de tirage (pull) dans la fenêtre Modifications Git de Visual Studio 2019.

    Vous pouvez également choisir Tirage (pull) dans le menu Git.

    Capture d’écran de l’option Tirage (pull) dans le menu Git de Visual Studio 2019.

  2. Un message de confirmation s’affiche lorsque l’opération de tirage (pull) se termine.

    Capture d’écran du message de confirmation dans les Modifications Git de Visual Studio 2019.

    Git vous avertit en cas de conflit durant la partie fusion de l’opération de tirage (pull) Git. Dans ce cas, vous pouvez résoudre les conflits ou annuler la fusion et revenir à l’état de pré-fusion.

    Capture d’écran du message de conflit de traction dans les Modifications Git de Visual Studio 2019.

Notes

Dans Visual Studio, la synchronisation effectue un tirage (pull) puis un envoi (push) pour synchroniser une branche locale et distante. Pour plus d’informations sur la synchronisation, consultez Utiliser Git récupération (fetch), tirage (pull), push et sync pour la gestion de version dans Visual Studio.

Étapes suivantes