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.
Ressource connexe
Commande git log avancée
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 :
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.