Utiliser des branches

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.

Checking out branches is similar to checking out old commits and files in that the working directory is updated to match the selected branch/revision; however, new changes are saved in the project history—that is, it’s not a read-only operation.

Checking out branches

The git checkout command lets you navigate between the branches created by git branch. Checking out a branch updates the files in the working directory to match the version stored in that branch, and it tells Git to record all new commits on that branch. Think of it as a way to select which line of development you’re working on.

Having a dedicated branch for each new feature is a dramatic shift from a traditional SVN workflow. It makes it ridiculously easy to try new experiments without the fear of destroying existing functionality, and it makes it possible to work on many unrelated features at the same time. In addition, branches also facilitate several collaborative workflows.

The git checkout command may occasionally be confused with git clone. The difference between the two commands is that clone works to fetch code from a remote repository, alternatively checkout works to switch between versions of code already on the local system.

Usage: Existing branches

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.

New Branches

Git checkout works hand-in-hand with git branch. The git branch command can be used to create a new branch. When you want to start a new feature, you create a new branch off master using git branch new_branch. Once created you can then use git checkout new_branch to switch to that branch. Additionally, The git checkout command accepts a -b argument that acts as a convenience method which will create the new branch and immediately switch to it. You can work on multiple features in a single repository by switching between them with git checkout.

git checkout -b <nouvelle-branche>

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

git checkout -b <nouvelle-branche> <branche-existante>

By default git checkout -b will base the new-branch off the current HEAD. An optional additional branch parameter can be passed to git checkout. In the above example, <existing-branch> is passed which then bases new-branch off of existing-branch instead of the current HEAD.

Switching Branches

Naviguer entre les branches est une opération directe. Exécuter la commande suivante placera HEAD sur la pointe de <nom_branche>.

git checkout <nom_branche>

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

When collaborating with a team it is common to utilize remote repositories. These repositories may be hosted and shared or they may be another colleague's local copy. Each remote repository will contain its own set of branches. In order to checkout a remote branch you have to first fetch the contents of the branch.

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 <branche_distante>

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

git checkout <branche_distante> origin/<branche_distante>

Additionally you can checkout a new local branch and reset it to the remote branches last commit.

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 ».

This is a warning telling you that everything you’re doing is “detached” from the rest of your project’s development. If you were to start developing a feature while in a detached HEAD state, there would be no branch allowing you to get back to it. When you inevitably check out another branch (e.g., to merge your feature in), there would be no way to reference your feature:

The point is, your development should always take place on a branch—never on a detached HEAD. This makes sure you always have a reference to your new commits. However, if you’re just looking at an old commit, it doesn’t really matter if you’re in a detached HEAD state or not.

Summary

This page focused on usage of the git checkout command when changing branches. In summation, git checkout, when used on branches, alters the target of the HEAD ref. It can be used to create branches, switch branches, and checkout remote branches. The git checkout command is an essential tool for standard Git operation. It is a counterpart to git merge. The git checkout and git merge commands are critical tools to enabling git workflows.

Prêt à tester le branching ?

Essayez ce tutoriel interactif.

Démarrez maintenant