Cours
Lorsque nous devons travailler sur une branche d’un dépôt distant, qu’il s’agisse du travail d’un collègue ou d’une nouvelle branche de fonctionnalité, le défi consiste à y accéder et à la mettre à jour en local.
Heureusement, Git simplifie ce processus grâce à des commandes directes pour créer une copie locale de la branche distante. Nous pouvons ainsi basculer sur la branche souhaitée, contribuer et collaborer efficacement avec l’équipe.
En bref, pour faire checkout d’une branche nommée <branch_name>, exécutez :
git fetch origin <branch_name>
git checkout -b <branch_name> origin/<branch_name>
Dans cet article, nous passons en revue ces commandes et voyons en détail leur fonctionnement.
Le processus en deux étapes : git fetch et git checkout
Pour commencer à travailler localement sur une branche distante, il faut d’abord s’assurer que notre dépôt local est à jour avec le dépôt distant. Nous pouvons ensuite créer une copie locale et travailler sur cette branche.
Mettre à jour le dépôt local
Pour mettre à jour le dépôt local, nous utilisons la commande git fetch. Dans sa forme la plus simple, elle ne prend aucun argument :
git fetch
Sans arguments, git fetch récupère toutes les branches du dépôt distant par défaut. Cela inclut la branche visée, mais occupera davantage d’espace disque local.
Si l’espace disque est un sujet, nous pouvons préciser la branche à récupérer en la passant en paramètre :
git fetch origin <branch_name>
Remplacez <branch_name> par le nom de la branche souhaitée. Le paramètre origin correspond au nom du dépôt distant. Par défaut, lorsque nous clonons un dépôt, le remote s’appelle origin.
Il est important de noter que la mise à jour des références distantes avec fetch n’affecte pas les fichiers locaux et ne provoque aucun conflit. En local, deux entités sont distinctes :
- Le répertoire de travail actuel
- Le dépôt local
Nos modifications et commits en cours se trouvent dans le répertoire de travail actuel. Ce sont les fichiers visibles lorsque nous ouvrons le dossier du dépôt sur notre ordinateur. Ils ne sont pas modifiés par git fetch. Seul le dépôt local est mis à jour ; vous pouvez le voir comme une copie « cachée » du dépôt distant sur notre machine.
Basculer sur une branche distante
Avec une copie du dépôt distant à jour, nous pouvons créer une copie locale d’une branche distante à l’aide de la commande git checkout :
git checkout -b <branch_name> origin/<branch_name>
Remplacez <branch_name> par le nom de la branche distante visée. Le premier paramètre après -b est le nom que nous souhaitons donner à la branche locale. Par convention, on garde le même nom, mais vous pouvez en choisir un autre, à condition qu’aucune branche locale n’utilise déjà ce nom :
git checkout -b <local_branch_name> origin/<branch_name>
Après exécution, Git bascule le répertoire de travail actuel sur cette branche, et nous pouvons commencer à y travailler.
git checkout vs git switch
La commande git checkout existe depuis la création de Git. Son périmètre dépasse la création de copies locales de branches ou le simple changement de branche. Par exemple, elle peut récupérer des fichiers spécifiques depuis le dépôt distant.
Dans les versions récentes de Git, une commande git switch a été introduite, dédiée à la création de copies locales de branches distantes et au passage d’une branche locale à une autre.
Je vous recommande d’utiliser git switch plutôt que git checkout, car les capacités étendues de git checkout peuvent parfois prêter à confusion et entraîner des erreurs.
Pour apprendre à effectuer les mêmes actions vues dans cet article avec git switch, consultez ce tutoriel : Git Switch Branch: A Guide With Practical Examples.
Conclusion
Créer localement une copie d’une branche Git distante est essentiel pour collaborer. Avec git fetch et git checkout, nous pouvons mettre à jour notre dépôt local avec les changements distants et basculer sur la branche voulue.
Si git checkout reste une commande puissante et polyvalente, la commande plus récente git switch propose une alternative épurée, pensée pour la gestion des branches, et limite les risques d’erreurs.
FAQ
Je reçois l’erreur : "please commit your changes or stash them before you switch branches." Comment la corriger ?
Git empêche de changer de branche si la branche actuelle contient des modifications non validées. Pour résoudre ce problème, vous pouvez soit mettre vos changements de côté (stash), soit les valider (commit).
Pour les valider, utilisez la commande suivante :
git commit -m \"Commit message\"
Sinon, si vous souhaitez conserver les changements sans encore les valider, utilisez git stash pour les enregistrer temporairement :
git stash
Vous pourrez ensuite les réappliquer après être revenu sur la branche d’origine avec git stash pop.
Et si la branche distante a le même nom qu’une branche locale ?
Avec Git, les noms de branches doivent être uniques. Si une erreur indique que la branche existe déjà, cela signifie qu’une branche locale porte le même nom. Deux cas possibles :
- Vous avez déjà fait checkout de cette branche auparavant. Dans ce cas, vous pouvez y basculer directement, sans fetch, avec
git checkout <branch_name>. Notez que nous avons omis le paramètre-b, qui sert à créer une nouvelle branche. Puisqu’elle existe déjà, il est inutile de la recréer. - Vous avez créé à un moment une autre branche portant ce même nom. Résolvez le conflit en choisissant un autre nom avec
git checkout -b <different_name> origin/<branch_name>.
Puis-je modifier directement une branche distante ?
Non. Les modifications sur une branche Git se font en créant d’abord une copie locale de la branche, comme vu plus haut, puis en créant des commits qui représentent ces changements.
Comment mettre à jour ma branche locale avec les derniers changements distants ?
Pour mettre à jour notre branche locale avec les derniers changements de sa branche distante correspondante, on utilise généralement la commande git pull :
git pull origin <branch_name>
Cette commande effectue à la fois un git fetch et un git merge pour mettre à jour la branche locale. Nous avons vu que git fetch met à jour le dépôt local avec la dernière version distante. La commande git merge fusionne ensuite ces changements dans notre branche locale. Pour en savoir plus, consultez ce tutoriel sur git push et pull.
Je reçois l’erreur : "remote branch not found." Comment la corriger ?
Cette erreur indique que la branche n’existe pas dans notre copie locale du dépôt. Donc, soit :
- La branche n’existe pas (il peut s’agir d’une faute de frappe ou d’une ancienne branche déjà supprimée).
- Le dépôt local n’est pas à jour. Comme vu plus haut, mettez-le à jour avec
git fetch.
