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
eut ê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
. L'extraction 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 la commande git clone fonctionne pour faire un fetch du code à partir d'un dépôt distant, tandis que la commande git checkout permet de basculer entre les versions de code déjà présentes sur le système local.
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 master 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 main dans la main 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 master
à l'aide de la commande git branch nouvelle_branche
. Une fois créé, 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 avec git checkout
.
git checkout -b
L'exemple ci-dessus crée et extrait simultanément la branche
. L'option -b
est un flag de commodité qui ordonne à Git d'exécuter git branch
avant git checkout
.
git checkout -b
Par défaut, git checkout -b
basera la nouvelle-branche
hors du HEAD
actuel. Un paramètre de branche supplémentaire facultatif peut être transmis à git checkout
. Dans l'exemple ci-dessus, la
est transmise et base la nouvelle-branche
sur la branche-existante
au lieu du HEAD
actuel.
Basculement entre branches
Naviguer entre les branches est une opération directe. Exécuter la commande suivante placera HEAD
sur la pointe de
git checkout
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
Les anciennes versions de Git nécessitent la création d'une branche basée sur la remote
.
git checkout origin/
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 git reset --hard origin/
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ée », 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 une HEAD
détachée. 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ée » ou non.
Résumé
Cette page se concentre sur l'utilisation de la commande git checkout
lors de changement de branches. En résumé, la commande git checkout
, utilisée sur les branches, modifie la cible de la réf HEAD
. Elle peut être utilisée pour créer des branches, changer de branches et faire un checkout de branches distantes. La commande git checkout
est un outil essentiel pour les opérations Git standard. Il s'agit d'une contrepartie de la commande git merge
. Les commandes git checkout
et git merge
sont des outils critiques pour activer git workflows
.