Close

Git checkout

Cette page traite de la commande git checkout. Différents cas d'usage et de figure seront abordés. Dans la terminologie Git, un « checkout » désigne un basculement entre différentes versions d'une entité cible. La commande git checkout agit sur trois entités distinctes : les fichiers, les commits et les branches. Outre la définition de « checkout », l'expression « checking out » est couramment utilisée pour indiquer l'exécution de la commande git checkout. Dans la rubrique Annuler des changements, nous avons vu comment la commande git checkout peut être utilisée pour afficher d'anciens commits. La majeure partie de ce document portera sur les opérations de checkout sur les branches.

Faire un checkout des branches est similaire à faire un checkout d'anciens commits et d'anciens fichiers dans la mesure où le répertoire de travail est mis à jour pour correspondre à la branche/révision sélectionnée ; cependant, les nouveaux changements sont enregistrés dans l'historique du projet, c'est-à-dire que ce n'est pas une opération en lecture seule.


Checkout de branches


La commande git checkout vous permet de basculer entre les branches créées au moyen de git branch. Le check-out d'une branche entraîne une mise à jour des fichiers contenus dans le répertoire de travail, qui s'alignent sur la version stockée dans cette branche. En outre, Git reçoit l'ordre d'enregistrer tous les nouveaux commits sur cette branche. Considérez cette opération comme une manière de sélectionner la ligne de développement sur laquelle vous travaillez.

Disposer d'une branche dédiée à chaque nouvelle fonctionnalité est un changement radical par rapport au workflow SVN classique. Il vous permet d'essayer facilement de nouvelles choses sans craindre de détruire les fonctionnalités existantes. Vous pouvez également travailler sur de nombreuses fonctionnalités en même temps. De plus, les branches simplifient également certains workflows de collaboration.

La commande git checkout peut parfois être confondue avec la commande git clone. La différence entre les deux commandes est que git clone fait un fetch du code à partir d'un dépôt distant, tandis que git checkout permet de basculer entre les versions de code déjà présentes sur le système local.

Fenêtre de console
Ressource connexe

Commande git log avancée

Logo Bitbucket
DÉCOUVRIR LA SOLUTION

Découvrir Git avec Bitbucket Cloud

Utilisation : branches existantes


En supposant que le dépôt dans lequel vous travaillez contient des branches préexistantes, vous pouvez basculer entre ces branches avec la commande git checkout. Pour déterminer quelles branches sont disponibles et quel est le nom de la branche en cours, exécutez git branch.

$> git branch 
main 
another_branch 
feature_inprogress_branch 
$> git checkout feature_inprogress_branch

L'exemple ci-dessus montre comment afficher une liste de branches disponibles en exécutant la commande git branch et passer à une branche spécifique, dans le cas présent, feature_inprogress_branch.

Nouvelles branches


git checkout fonctionne de concert avec git branch. La commande git branch peut être utilisée pour créer une branche. Lorsque vous voulez démarrer une nouvelle fonctionnalité, vous créez une branche hors main à l'aide de la commande git branch nouvelle_branche. Une fois la branche créée, vous pouvez ensuite utiliser git checkout nouvelle_branche pour basculer vers cette branche. De plus, la commande git checkout accepte un argument -b qui agit comme une méthode pratique pour créer la branche et basculer vers elle immédiatement. Vous pouvez travailler sur plusieurs fonctionnalités dans un seul dépôt en basculant entre les branches grâce à git checkout.

git checkout -b <new-branch>

L'exemple ci-dessus crée et extrait simultanément la branche <new-branch>. L'option -b est un flag de commodité qui ordonne à Git d'exécuter la commande git branch avant git checkout .

git checkout -b <new-branch> <existing-branch>

Par défaut, git checkout -b basera la branche new-branch hors du HEAD actuel. Un paramètre de branche supplémentaire facultatif peut être transmis à git checkout. Dans l'exemple ci-dessus, la branche existing-branch> est transmise. La branche new-branch est alors basée sur existing-branch et non sur le HEAD actuel.

Basculement entre branches


La navigation entre les branches est une opération directe. Exécutez la commande suivante pour placer HEAD sur la pointe de <branchname>.

git checkout <branchname>

Git suit un historique des opérations « checkout » dans le reflog. Vous pouvez exécuter git reflog pour afficher l'historique.

Commande git checkout sur une branche distante


Lorsque vous collaborez avec une équipe, il est courant d'utiliser des dépôts distants. Ces dépôts peuvent être hébergés et partagés, ou ils peuvent être la copie locale d'un autre collègue. Chaque dépôt distant contiendra son propre ensemble de branches. Pour faire le checkout d'une branche distante, vous devez d'abord faire un fetch du contenu de cette branche.

git fetch --all

Dans les versions modernes de Git, vous pouvez ensuite effectuer un checkout de la branche distante comme une branche locale.

git checkout <remotebranch>

Les anciennes versions de Git nécessitent la création d'une nouvelle branche basée sur la remote.

git checkout -b <remotebranch> origin/<remotebranch>

De plus, vous pouvez faire le checkout d'une nouvelle branche locale et la réinitialiser au dernier commit des branches distantes.

git checkout -b <branchname>
git reset --hard origin/<branchname>

HEAD détachée


Maintenant que nous connaissons les trois utilisations principales de git checkout sur les branches, il est essentiel de discuter de l'état « HEAD détachée ». Rappelez-vous que Git utilise HEAD pour faire référence à l'instantané actuel. En interne, la commande git checkout met simplement à jour l'élément HEAD sur le point du commit ou de la branche spécifié. Lorsqu'il pointe vers une branche, Git ne se plaint pas, mais quand vous extrayez un commit, il bascule à l'état « HEAD détachée ».

Ce signal vous avertit que toutes les opérations que vous effectuez sont isolées du reste de votre projet. Si vous commencez à développer une fonctionnalité à l'état « HEAD détaché », vous ne pourrez pas y revenir grâce à une branche. Si vous extrayez une autre branche (p. ex. pour y merger votre fonctionnalité), il ne vous sera pas possible de la référencer :

Tête jointe et tête dissociée

En principe, vous devriez toujours travailler sur une branche, jamais sur un HEAD détaché. Par conséquent, vos nouveaux commits sont automatiquement référencés. Cependant, si vous vous contentez d'examiner un ancien commit, peu importe si vous êtes passé à l'état « HEAD détaché » ou non.

Résumé


Cette page se concentre sur l'utilisation de la commande git checkout lorsque vous modifiez des branches. En résumé, lorsque la commande git checkout est utilisée sur des branches, elle modifie la cible de la réf HEAD. Elle peut être utilisée pour créer des branches, changer de branche et faire un check-out de branches distantes. La commande git checkout est un outil essentiel pour le fonctionnement standard de Git. C'est l'équivalent de git merge. Les commandes git checkout et git merge sont des outils essentiels pour faciliter les workflows Git.


Partager cet article
Thème suivant

Lectures recommandées

Ajoutez ces ressources à vos favoris pour en savoir plus sur les types d'équipes DevOps, ou pour les mises à jour continues de DevOps chez Atlassian.

Des personnes qui collaborent à l'aide d'un mur rempli d'outils

Le blog Bitbucket

Illustration DevOps

Parcours de formation DevOps

Démos Des démos avec des partenaires d'Atlassian

Fonctionnement de Bitbucket Cloud avec Atlassian Open DevOps

Inscrivez-vous à notre newsletter DevOps

Thank you for signing up