Recherche de site Web

Git Fetch : une classe de maître


Résumé : La commande git fetch est comme une commande git pull qui met à jour votre référentiel local avec des informations et des validations à partir du référentiel distant, sans écraser vos fichiers de travail.

La commande Git fetch vous permet de regarder avant de sauter. Vous pouvez découvrir les modifications apportées à un référentiel distant, mais sans écraser vos fichiers locaux avec les fichiers distants.

Qu'est-ce que git fetch et que fait-il ?

La commande fetch de Git télécharge les commits, les fichiers et d'autres informations d'un référentiel distant vers votre référentiel local, en toute sécurité. Utilisez fetch lorsque vous souhaitez voir les modifications apportées par d'autres développeurs, sans être obligé d'accepter les modifications. Vos fichiers locaux restent intacts. Pourquoi est-ce important ?

Vous devez garder votre sang-froid lorsque vous travaillez au sein d'une équipe de développement. Le référentiel distant ou central contiendra les modifications et les nouvelles branches que d'autres développeurs ont créées et poussées vers le référentiel distant.

Il est tout à fait possible que quelqu'un ait mis à jour la copie distante des fichiers que vous avez modifiés localement sur votre ordinateur. Si vous effectuez avec désinvolture un git pull pour mettre à jour votre référentiel local, vous vous retrouverez probablement à gérer des fusions pour des modifications que vous ne souhaitez peut-être même pas.

Une fois que vous avez téléchargé les informations, vous pouvez les examiner et voir quels sont les changements. Cela vous permet de faire un choix éclairé sur ce que vous souhaitez fusionner maintenant, le cas échéant, et sur ce que vous souhaitez reporter à plus tard.

Git fetch vs pull

La commande git fetch se comporte comme la commande git pull mais sans l'étape qui écrase vos fichiers locaux. Votre référentiel local est mis à jour et synchronisé, mais les modifications ne sont pas écrites dans l'état de fonctionnement de votre référentiel local, de sorte que vos fichiers restent intacts.

Ou, pour le dire autrement, la commande git pull est comme un git fetch suivi immédiatement d'un git merge .

Synchronisez vos référentiels locaux et distants avec git fetch

Pour récupérer toutes les métadonnées mises à jour et les commits d'un référentiel distant vers votre référentiel local, utilisez la commande git fetch avec le nom ou l'URL du référentiel distant. Par défaut, le premier référentiel distant est appelé origine.

git fetch origin

Vous pouvez omettre le mot origine si vous travaillez avec un seul référentiel distant.

git fetch

Cela récupère toutes les mises à jour du référentiel origine, mais il ne fusionne pas les modifications dans les fichiers de travail. Nous pouvons voir qu'il y a une nouvelle branche, appelée new-branch, qui a été récupérée pour nous.

Une fois que vous avez utilisé la commande fetch, vous pouvez voir la liste complète des branches sur la télécommande, en utilisant l'option -r (remote) avec la commande branch.

git branch -r

Cela répertorie toutes les branches connues par la télécommande, qui après le fetch , se trouvent également dans votre référentiel local.

Voir toutes les balises récupérées

De même, vous pouvez utiliser l'option tag (notez que c'est tag sans s) pour voir la liste des tags.

git tag

Faire d'abord un essai à blanc

Bien qu'un git fetch ne fusionne pas les modifications dans vos fichiers de travail, il met toujours à jour votre référentiel local. Si vous voulez voir quel changement la commande fetch effectuera, sans le faire réellement, utilisez l'option --dry-run.

git fetch --dry-run

Comment récupérer une seule branche

Récupérer des informations sur une seule branche est facile. Ajoutez le nom de la branche à la ligne de commande pour indiquer à fetch que vous n'avez besoin de connaître que cette branche.

Ici, nous disons à fetch de récupérer la branche mary-feature du référentiel distant origin.

git fetch origin mary-feature

Maintenant que les détails et le contenu de la branche distante se trouvent dans votre référentiel local, vous pouvez utiliser la commande git checkout pour créer une nouvelle branche et extraire la branche distante. Cela n'écrasera aucun fichier existant si c'est la première fois que vous utilisez cette branche.

git checkout -b mary-feature origin/mary-feature

Récupérer toutes les branches

Si vous utilisez plusieurs télécommandes, vous pouvez gagner du temps en extrayant toutes les modifications de toutes les branches vers votre référentiel local en utilisant l'option --all.

git fetch --all

Comparaison des succursales locales et distantes

Pour voir en quoi les fichiers d'une branche distante diffèrent de vos copies locales, utilisez git fetch , puis utilisez la commande git log.

Notez que les branches locales et distantes sont séparées par deux points ... L'option --oneline affiche l'identifiant de validation et le message de validation.

git fetch
git log --oneline mary-feature..origin/mary-feature

L'affichage sur une ligne est utile si une branche contient un grand nombre de modifications. Pour voir un peu plus d'informations, omettez l'option --oneline.

git log mary-feature..origin/mary-feature

Cela nous montre l'heure et la date de chaque commit, ainsi que le message de commit et les coordonnées de l'auteur du changement.

Synchroniser une succursale locale avec une succursale distante

Si vous avez décidé de continuer et de fusionner les modifications de la branche distante vers vos fichiers de travail locaux, vous pouvez utiliser ces commandes.

Nous vérifierons la branche pour nous assurer que nous travaillons, c'est notre branche actuelle et fonctionnelle.

git checkout mary-feature

La branche est vérifiée pour nous, et on nous dit qu'elle est derrière la version distante. Nous pouvons utiliser git pull pour le mettre à jour, puis git status pour vérifier notre statut.

git pull
git status

Si nous avons apporté des modifications à nos fichiers locaux, Git nous informe lorsque nous vérifions la branche que nous devrons effectuer un git pull pour démarrer une fusion.

git checkout mary-feature

Un simple git pull démarre le processus de récupération des fichiers et de fusion, ou nous pouvons plonger directement et utiliser git merge lui-même. Nous allons commencer par nous assurer que nous travaillons avec la bonne branche

git checkout mary-feature

Nous dirons à git de fusionner notre branche actuelle avec la branche du référentiel distant, il y a six commits différents qui doivent être résolus.

Nous devons indiquer à Git quelle branche distante nous voulons fusionner.

git merge origin/mary-feature

Un éditeur s'ouvre pour nous permettre de fournir un message de validation. Nous pouvons accepter le message suggéré ou ajouter le nôtre. L'éditeur est votre éditeur par défaut sauf si Git a été configuré pour utiliser un autre éditeur.

Enregistrez vos modifications lorsque vous êtes prêt à continuer. La fusion se poursuit automatiquement à la fermeture de l'éditeur.

Notre fusion a réussi car il n'y a pas eu de conflits.

Des conflits surviennent lorsque les mêmes lignes de code sont modifiées par deux développeurs ou plus. Si tel est le cas, Git marque les conflits dans le fichier concerné. Vous devrez les examiner à tour de rôle et choisir la modification à conserver.

Le chiot à moitié dressé

Tout comme un chiot en formation, fetch récupérera ce que vous demandez, mais il ne le laissera pas tomber. Si vous voulez réellement ce que le chiot vous a montré, vous devrez tirer.