Setup and Config
Getting and Creating Projects
Basic Snapshotting
Branching and Merging
Sharing and Updating Projects
Inspection and Comparison
Patching
Debugging
External Systems
Server Admin
Guides
- gitattributes
- Command-line interface conventions
- Everyday Git
- Frequently Asked Questions (FAQ)
- Glossary
- Hooks
- gitignore
- gitmodules
- Revisions
- Submodules
- Tutorial
- Workflows
- All guides...
Administration
Plumbing Commands
- 2.44.1 → 2.47.0 no changes
- 2.44.0 02/23/24
- 2.43.2 → 2.43.5 no changes
- 2.43.1 02/09/24
- 2.43.0 11/20/23
- 2.41.1 → 2.42.3 no changes
- 2.41.0 06/01/23
- 2.40.1 → 2.40.3 no changes
- 2.40.0 03/12/23
- 2.39.4 → 2.39.5 no changes
- 2.39.3 04/17/23
- 2.38.1 → 2.39.2 no changes
- 2.38.0 10/02/22
- 2.35.1 → 2.37.7 no changes
- 2.35.0 01/24/22
- 2.34.1 → 2.34.8 no changes
- 2.34.0 11/15/21
- 2.30.1 → 2.33.8 no changes
- 2.30.0 12/27/20
- 2.29.1 → 2.29.3 no changes
- 2.29.0 10/19/20
- 2.27.1 → 2.28.1 no changes
- 2.27.0 06/01/20
- 2.25.1 → 2.26.3 no changes
- 2.25.0 01/13/20
- 2.23.1 → 2.24.4 no changes
- 2.23.0 08/16/19
- 2.22.1 → 2.22.5 no changes
- 2.22.0 06/07/19
- 2.21.1 → 2.21.4 no changes
- 2.21.0 02/24/19
- 2.19.3 → 2.20.5 no changes
- 2.19.2 11/21/18
- 2.19.1 no changes
- 2.19.0 09/10/18
- 2.17.0 → 2.18.5 no changes
- 2.16.6 12/06/19
- 2.15.4 no changes
- 2.14.6 12/06/19
- 2.13.7 05/22/18
- 2.11.4 → 2.12.5 no changes
- 2.10.5 09/22/17
- 2.9.5 07/30/17
- 2.8.6 no changes
- 2.7.6 07/30/17
- 2.6.7 no changes
- 2.5.6 05/05/17
- 2.4.12 05/05/17
- 2.1.4 → 2.3.10 no changes
- 2.0.5 12/17/14
SYNOPSIS
git checkout [-q] [-f] [-m] [<branche>] git checkout [-q] [-f] [-m] --detach [<branche>] git checkout [-q] [-f] [-m] [--detach] <commit> git checkout [-q] [-f] [-m] [[-b|-B|--orphan] <nouvelle-branche>] [<point-de-dĂ©part>] git checkout [-f] <arbre-esque> [--] <spec-de-chemin>… git checkout [-f] <arbre-esque> --pathspec-from-file=<fichier> [--pathspec-file-nul] git checkout [-f|--ours|--theirs|-m|--conflict=<style>] [--] <spec-de-chemin>… git checkout [-f|--ours|--theirs|-m|--conflict=<style>] --pathspec-from-file=<fichier> [--pathspec-file-nul] git checkout (-p|--patch) [<arbre-esque>] [--] [<spec-de-chemin>…]
DESCRIPTION
Met Ă jour les fichiers dans l’arbre de travail pour correspondre Ă la version dans l’index ou dans l’arbre spĂ©cifiĂ©. Si aucun spĂ©cificateur de chemin n’est fourni, git checkout met aussi Ă jour HEAD
pour positionner la branche spécifiée comme la branche actuelle.
- git checkout [<branche>]
-
Pour se préparer à travailler sur
<branche>
, basculer dessus en mettant l’index et les fichiers de l’arbre de travail Ă jour, et en pointantHEAD
sur cette branche. Les modifications locales aux fichiers de l’arbre de travail sont conservĂ©es, de sorte qu’elles peuvent ĂŞtre validĂ©es sur la<branche>
.Si la
<branche>
n’est pas trouvĂ©e mais qu’il existe une branche de suivi pour un dĂ©pĂ´t distant unique (appelĂ©e<distant>
) avec un nom correspondant et--no-guess
n’est pas spĂ©cifiĂ©, le traiter comme Ă©quivalent Ă$ git checkout -b <branche> --track <distant>/<branche>
Vous pourriez omettre
<branche>
, auquel cas la commande dĂ©gĂ©nère en « extraire la branche actuelle », qui est une opĂ©ration nulle de luxe avec des effets de bord plutĂ´t chers de ne montrer que l’information de suivi, si elle existe, pour la branche actuelle. - git checkout -b|-B <nouvelle-branche> [<point-de-dĂ©part>]
-
Spécifier
-b
provoque la crĂ©ation d’une nouvelle branche comme si git-branch[1] Ă©tait lancĂ© puis la branche extraite. Dans ce cas, vous pouvez utiliser les options--track
ou--no-track
, qui seront passées à git branch. Pour plus de confort,--track
sans-b
implique la crĂ©ation d’une branche ; voir la description de--track
ci-dessous.Si
-B
est fourni,<nouvelle-branche>
est crĂ©Ă©e si elle n’existe pas ; sinon, elle est rĂ©initialisĂ©e. C’est l’Ă©quivalent transactionnel de$ git branch -f <branche> [<point-de-dĂ©part>] $ git checkout <branche>
c’est-Ă -dire que la branche n’est pas rĂ©initialisĂ©e/crĂ©Ă©e Ă moins que "git checkout" soit rĂ©ussi (par exemple, lorsque la branche est utilisĂ©e dans un autre arbre de travail, pas seulement que la branche actuelle reste la mĂŞme, mais la branche n’est pas rĂ©initialisĂ©e au point de dĂ©part non plus).
- git checkout --detach [<branche>]
- git checkout [--detach] <commit>
-
Prépare à travailler par-dessus
<commit>
, en détachantHEAD
dessus (voir la section « HEAD DÉTACHÉE »), et en mettant l’index et les fichiers de l’arbre de travail Ă jour. Les modifications locales des fichiers dans l’arbre de travail sont conservĂ©es, de sorte que l’arbre de travail sera le rĂ©sultat du commit plus les modifications locales.Quand l’argument
<commit>
est un nom de branche, l’option--detach
peut être utilisée pour détacherHEAD
au sommet de la branche (git checkout <branche>
extrairait cette branche sans détacherHEAD
).Omettre
<branche>
détacheHEAD
au sommet de la branche actuelle. - git checkout [-f|--ours|--theirs|-m|--conflict=<style>] [<arbre-esque>] [--] <spĂ©c. de chemin>…
- git checkout [-f|--ours|--theirs|-m|--conflict=<style>] [<arbre-esque>] --pathspec-from-file=<fichier> [--pathspec-file-nul]
-
Écraser le contenu des fichiers qui correspondent au spécificateur-de-chemin. Lorsque le
<arbre-esque>
(le plus souvent un commit) n’est pas donnĂ©, Ă©craser l’arbre de travail avec le contenu de l’index. Lorsque le<arbre-esque>
est donnĂ©, Ă©craser Ă la fois l’index et l’arbre de travail avec le contenu du<arbre-esque>
.L’index peut contenir des entrĂ©es non fusionnĂ©es Ă cause d’un Ă©chec prĂ©cĂ©dent de fusion. Par dĂ©faut, si vous essayez d’extraire une telle entrĂ©e depuis l’index, l’opĂ©ration d’extraction Ă©chouera et rien ne sera extrait. L’utilisation de
-f
forcera Ă ignorer ces entrĂ©es non fusionnĂ©es. Le contenu depuis un cĂ´tĂ© donnĂ© de la fusion peut ĂŞtre extrait de l’index en utilisant--ours
(notre côté) ou--theirs
(l’autre cĂ´tĂ©). Avec-m
, les modifications opĂ©rĂ©es sur le fichier de l’arbre de travail peuvent ĂŞtre jetĂ©es pour rĂ©crĂ©er le rĂ©sultat originel de conflit de fusion. - git checkout (-p|--patch) [<arbre-esque>] [--] [<spĂ©c. de chemin>…]
-
C’est similaire au mode prĂ©cĂ©dent, mais vous laisse utiliser l’interface interactive pour afficher la sortie « diff » et choisir quelles sections utiliser dans le rĂ©sultat. Voir plus bas la description de l’option
--patch
.
OPTIONS
- -q
- --quiet
-
Silencieux, supprimer les messages d’Ă©tat.
- --progress
- --no-progress
-
L’Ă©tat d’avancement est affichĂ© sur la sortie standard d’erreur par dĂ©faut quand elle est attachĂ©e Ă un terminal, Ă moins que
--quiet
ne soit spĂ©cifiĂ©. Cette bascule active l’Ă©tat d’avancement mĂŞme sans ĂŞtre attachĂ© Ă un terminal, indĂ©pendamment de--quiet
. - -f
- --force
-
Lors du basculement de branche, continuer mĂŞme si l’index ou l’arbre de travail sont diffĂ©rents de
HEAD
, et mĂŞme s’il y a des fichiers non-suivis qui bloquent.Ceci peut servir Ă Ă©liminer des modifications locales ainsi que tous les fichiers ou rĂ©pertoires non-suivis qui gĂŞnent.Lors de l’extraction de chemins depuis l’index, ne pas Ă©chouer sur des entrĂ©es non fusionnĂ©es ; Ă la place, les entrĂ©es non fusionnĂ©es sont ignorĂ©es.
- --ours
- --theirs
-
Lors de l’extraction de chemins depuis l’index, extraire l’Ă©tat #2 (ours, le nĂ´tre) ou #3 (theirs, le leur) pour les chemins non fusionnĂ©s.
Veuillez noter que pendant
git rebase
etgit pull --rebase
,ours
ettheirs
peuvent sembler échangés ;--ours
fournit la version depuis la branche sur laquelle les modifications sont rebasées, tandis que--theirs
fournit la version de la branche qui contient le travail rebasĂ©.C’est parce que
rebase
est utilisĂ© dans une approche qui traite l’historique distant comme la rĂ©fĂ©rence canonique partagĂ©e, et traite le travail sur la branche que vous rebasez comme un travail tiers Ă intĂ©grer, et vous endossez temporairement le rĂ´le du gardien de l’historique canonique quand vous rebasez. En tant que gardien de l’historique canonique, vous devez voir l’historique distant comme le vĂ´tre (ours, c’est-Ă -dire « notre historique partagĂ© canonique »), tandis que votre travail sur l’autre branche devient le tiers (theirs, c’est-Ă -dire « le travail d’un contributeur sur le canonique »). - -b <nouvelle-branche>
-
Créer une nouvelle branche nommée
<nouvelle-branche>
, la commencer Ă<point-de-dĂ©part>
et extraire la branche résultante ; voir git-branch[1] pour plus de détails. - -B <nouvelle-branche>
-
Créer la branche
<nouvelle-branche>
, la commencer Ă<point-de-dĂ©part>
et l’extraire ; si elle existe dĂ©jĂ , alors la rĂ©initialise Ă<point-de-dĂ©part>
. C’est Ă©quivalent Ă lancer git branch avec-f
suivi de git checkout de cette branche ; voir git-branch[1] pour plus de détails. - -t
- --track[=(direct|inherit)]
-
Ă€ la crĂ©ation d’une nouvelle branche, Ă©tablir la configuration upstream (branche amont). Voir
--track
dans git-branch[1] pour plus de détails.Si aucune option
-b
n’est fournie, le nom de la nouvelle branche sera dĂ©rivĂ© de la branche de suivi Ă distance, en regardant la partie locale de la spĂ©cification de rĂ©fĂ©rence configurĂ©e pour le distant correspondant et en enlevant la partie initiale jusqu’au "*". Cela indiquerait d’utiliser le nom «Âhack
 » comme branche locale créée à partir deorigin/hack
(ouremotes/origin/hack
, ou mĂŞmerefs/remotes/origin/hack
). Si le nom fourni ne contient pas de barre oblique, ou si le résultat de la dérivation est un nom vide, la dérivation échoue. Vous pouvez spécifier explicitement un nom avec-b
dans ce cas. - --no-track
-
Ne pas renseigner la configuration « amont », même si la configuration
branch.autoSetupMerge
est true. - --guess
- --no-guess
-
Si la
<branche>
n’est pas trouvĂ©e mais qu’il existe une branche de suivi pour un dĂ©pĂ´t distant unique (appelĂ©<distant>
) avec un nom correspondant, le traiter comme Ă©quivalent Ă$ git checkout -b <branche> --track <distant>/<branche>
Si la branche existe dans plus d’un distant et que l’un d’entre eux est la valeur de la variable de configuration
checkout.defaultRemote
, celui-ci sera utilisĂ© pour dĂ©sambiguĂŻser, mĂŞme si la <branche> n’est pas unique parmi tous les distants. RĂ©glez la variablecheckout.defaultRemote=origin
par exemple pour extraire toujours les branches distantes depuis celle-ci si <branche> est ambigĂĽe mais existe sur le distant origin. Voir aussicheckout.defaultRemote
dans git-config[1].--guess
est le comportement par défaut. Utilisez--no-guess
pour le désactiver.Le comportement par défaut peut être défini via la variable de configuration
checkout.guess
. - -l
-
Créer le reflog de la nouvelle branche ; voir git-branch[1] pour plus de détails.
- -d
- --detach
-
PlutĂ´t que d’extraire une branche pour travailler dessus, extraire un commit pour l’inspecter et faire des expĂ©riences jetables. C’est le comportement par dĂ©faut de
git checkout <commit>
quand<commit>
n’est pas un nom de branche. Voir la section « HEAD DÉTACHÉE » plus bas pour plus de dĂ©tails. - --orphan <nouvelle-branche>
-
Créer une nouvelle branche non née, nommée
<nouvelle-branche>
, commençant depuis<point-de-départ>
et basculer dessus. Le premier commit rĂ©alisĂ© sur cette branche n’aura pas de parent et il sera la racine du nouvel historique totalement dĂ©connectĂ© de toutes les autres branches et des autres commits.L’index et l’arbre de travail sont ajustĂ©s comme si vous aviez dĂ©jĂ lancĂ©
git checkout <point-de-départ>
. Cela vous permet de dĂ©marrer un nouvel historique qui enregistre un ensemble de chemins similaires Ă<point-de-dĂ©part>
en lançant simplementgit commit -a
pour crĂ©er le commit racine.Ceci peut ĂŞtre utile quand vous souhaitez publier un arbre depuis un commit sans exposer tout son historique. Vous pourriez souhaiter le faire pour publier une branche open source d’un projet dont l’arbre prĂ©sent est « propre », mais dont l’historique complet contient des morceaux de code propriĂ©taire ou autrement non publiables.
Si vous voulez démarrer un historique déconnecté qui enregistre un ensemble de chemins qui sont totalement différents de celui de
<point-de-départ>
, vous devriez effacer l’index et l’arbre de travail juste après avoir crĂ©Ă© la branche orpheline en lançantgit rm -rf .
depuis la racine de l’arbre de travail. Après, vous pourrez prĂ©parer vos nouveaux fichiers, pour repeupler l’arbre de travail, en les copiant depuis un autre endroit, en les extrayant depuis une archive, etc. - --ignore-skip-worktree-bits
-
En mode d’extraction clairsemĂ©,
git checkout -- <chemins>
mettrait seulement Ă jour les entrĂ©es correspondant Ă<chemins>
et aux motifs clairsemés dans$GIT_DIR/info/sparse-checkout
. Cette option ignore les motifs clairsemés et ré-ajoute tous les fichiers de<chemins>
. - -m
- --merge
-
Lors d’un basculement de branche, si vous avez des modifications locales sur un fichier ou plus qui sont diffĂ©rentes entre la branche actuelle et celle sur laquelle vous basculez, la commande refuse le basculement pour prĂ©server vos modifications dans leur contexte. Cependant, avec cette option, une fusion Ă trois points entre la branche actuelle, le contenu de votre arbre de travail et la nouvelle branche est opĂ©rĂ©e et vous serez sur la nouvelle branche.
Quand un conflit de fusion apparaĂ®t, les entrĂ©es d’index pour les chemins en conflit sont laissĂ©es non-fusionnĂ©es et vous devez rĂ©soudre les conflits et les marquer rĂ©solus pour les chemins concernĂ©s avec
git add
(ougit rm
si la fusion doit aboutir Ă la suppression du chemin).Lors de l’extraction de chemins depuis l’index, cette option vous permet de rĂ©crĂ©er la fusion en conflit dans les chemins spĂ©cifiĂ©s. Cette option ne peut pas ĂŞtre utilisĂ©e lors de l’extraction des chemins depuis un arbre-esque.
Lors du basculement de branche avec
--merge
, les modifications indexées peuvent être perdues. - --conflict=<style>
-
Identique Ă l’option
--merge
ci-dessus, mais la manière dont les sections en conflits sont présentées est modifiée, en surchargeant la variable de configurationmerge.conflictStyle
. Les valeurs possibles sontmerge
(fusion, par défaut),diff3
etzdiff3
. - -p
- --patch
-
Sélectionner interactivement les sections dans la différence entre l'
<arbre-esque>
(ou l’index, si non spĂ©cifiĂ©) et l’arbre de travail. Les sections choisies sont ensuite appliquĂ©es en ordre inversĂ© Ă l’arbre de travail (et si un<arbre-esque>
a Ă©tĂ© spĂ©cifiĂ©, Ă l’index).Ceci signifie que vous pouvez utiliser
git checkout -p
pour supprimer sélectivement les éditions depuis votre arbre de travail actuel. Voir la section « Mode Interactif » de git-add[1] pour apprendre à utiliser le mode--patch
.Notez que cette option utilise par défaut le mode sans superposition (voir aussi
--overlay
), et ne supporte pas actuellement le mode superposition. - --ignore-other-worktrees
-
git checkout
Ă©choue quand la rĂ©fĂ©rence voulue est dĂ©jĂ extraite dans un autre arbre de travail. Cette option force l’extraction. En d’autres termes, la rĂ©f peut ĂŞtre tenue par plus d’un arbre de travail. - --overwrite-ignore
- --no-overwrite-ignore
-
Écraser silencieusement les fichiers ignorĂ©s lors du basculement de branche. C’est le comportement par dĂ©faut. Utilisez
--no-overwrite-ignore
pour annuler l’opĂ©ration lorsque la nouvelle branche contient des fichiers ignorĂ©s. - --recurse-submodules
- --no-recurse-submodules
-
L’utilisation de
--recurse-submodules
permet de mettre Ă jour le contenu de tous les sous-modules actifs en fonction du commit enregistrĂ© dans le super-projet. Si des modifications locales au sous-modules seraient Ă©crasĂ©es, l’extraction Ă©choue Ă moins d’utiliser-f
. Si l’option n’est pas spĂ©cifiĂ©e (ou si--no-recurse-submodules
est spécifié), les arbres de travail des sous-modules ne sont pas mis à jour. Comme git-submodule[1], laHEAD
des sous-modules sera détachée. - --overlay
- --no-overlay
-
Dans le mode de superposition par défaut,
git checkout
ne supprime jamais les fichiers de l’index ou de l’arbre de travail. Lorsque vous spécifiez--no-overlay
, les fichiers qui apparaissent dans l’index et l’arbre de travail, mais pas dans «<arbre-esque>» sont supprimĂ©s, pour les faire correspondre Ă<arbre-esque>
exactement. - --pathspec-from-file=<fichier>
-
Le spécificateur de chemin est passé dans
<fichier>
au lieu des arguments de la ligne de commande. Si<fichier>
vaut-
alors l’entrĂ©e standard est utilisĂ©e. Les Ă©lĂ©ments du spĂ©cificateur de chemin sont sĂ©parĂ©s par LF ou CR/LF. Les Ă©lĂ©ments du spĂ©cificateur de chemin peuvent ĂŞtre citĂ©s comme expliquĂ© pour la variable de configurationcore.quotePath
(voir git-config[1]). Voir aussi l’option--pathspec-file-nul
et l’option globale--literal-pathspecs
. - --pathspec-file-nul
-
Uniquement significatif avec
--pathspec-from-file
. Les éléments du spécificateur de chemin sont séparés par le caractère NUL et tous les autres caractères sont utilisés littéralement (y compris les retours à la ligne et les guillemets). - <branche>
-
Branche Ă extraire ; si c’est une rĂ©fĂ©rence Ă une branche (c’est-Ă -dire un nom qui, prĂ©fixĂ© par « refs/heads/ » est une rĂ©fĂ©rence valide), alors cette branche est extraite. Sinon, si c’est une rĂ©fĂ©rence Ă un commit valide, votre
HEAD
devient « dĂ©tachĂ©e » et vous n’ĂŞtes plus sur aucune branche (voir plus bas pour plus de dĂ©tails).Vous pouvez utiliser la syntaxe
@{-N}
pour faire référence à la N-ième dernière branche ou commit extrait en utilisant une opération « git checkout ». Vous pouvez aussi spécifier-
qui est synonyme de@{-1}
.Autre cas spécial supplémentaire, vous pouvez utiliser
A...B
comme raccourci pour la base de fusion deA
etB
s’il y a exactement une seule base de fusion. Vous pouvez ne pas spĂ©cifierA
ouB
, auquel cas ce seraHEAD
par défaut. - <nouvelle-branche>
-
Nom pour une nouvelle branche.
- <point_de_départ>
-
Le nom du commit auquel démarrer la nouvelle branche ; voir git-branch[1] pour plus de détails.
HEAD
par dĂ©faut.Autre cas spĂ©cial supplĂ©mentaire, vous pouvez utiliser « A…B » comme raccourci pour la base de fusion de
A
etB
s’il y a exactement une seule base de fusion. Vous pouvez ne pas spĂ©cifierA
ouB
, auquel cas ce seraHEAD
par défaut. - <arbre-esque>
-
Arbre depuis lequel extraire (quand des chemins sont indiquĂ©s). Si non spĂ©cifiĂ©, l’index est utilisĂ©.
Autre cas spĂ©cial supplĂ©mentaire, vous pouvez utiliser « A…B » comme raccourci pour la base de fusion de
A
etB
s’il y a exactement une seule base de fusion. Vous pouvez ne pas spĂ©cifierA
ouB
, auquel cas ce seraHEAD
par défaut. - --
-
Ne pas interpréter les arguments qui suivent comme options.
- <spĂ©cificateur de chemin>…
-
Limite les chemins affectĂ©s par l’opĂ©ration.
Pour plus de dĂ©tail, voir l’entrĂ©e spĂ©cificateur de chemin dans gitglossary[7].
HEAD DÉTACHÉE
HEAD
fait normalement référence à une branche nommée (par exemple, master
). Dans le même temps, chaque branche pointe sur un commit spécifique. Regardons un dépôt avec trois commits, dont un est étiqueté, et avec la branche master
extraite :
HEAD (se réfère à la branche 'master') | v a---b---c branch 'master' (se réfère au commit 'c') ^ | tag 'v2.0' (se réfère au commit 'b')
Quand un commit est créé dans cet état, la branche est mise à jour pour faire référence au nouveau commit. Plus précisément, git commit crée un nouveau commit d
, dont le parent est le commit c
, et ainsi elle met Ă jour la branche master
pour faire référence au nouveau commit d
. HEAD
fait toujours référence à la branche master
et donc fait maintenant référence indirectement au commit d
 :
$ edit; git add; git commit HEAD (se réfère à la branche 'master') | v a---b---c---d branche 'master' (se réfère au commit 'd') ^ | tag 'v2.0' (se réfère au commit 'b')
Il est parfois utile de permettre l’extraction d’un commit qui n’est sommet d’aucune branche ou mĂŞme de crĂ©er un nouveau commit qui n’est pas rĂ©fĂ©rencĂ© par une branche nommĂ©e. Regardons ce qui arrive quand on extrait le commit b
(ici, deux manières de faire sont montrées) :
$ git checkout v2.0 # ou $ git checkout master^^ HEAD (se réfère au commit 'b') | v a---b---c---d branch 'master' (se réfère au commit 'd') ^ | tag 'v2.0' (se réfère au commit 'b')
Veuillez noter que quelle que soit la commande d’extraction utilisĂ©e, HEAD
pointe maintenant directement sur le commit b
. C’est connu comme Ă©tant l’Ă©tat HEAD
détachée. Ceci signifie simplement que HEAD
fait référence à un commit spécifique, par opposition à une référence à une branche nommée. Voyons ce qui arrive quand un commit est créé :
$ edit; git add; git commit HEAD (se réfère au commit 'e') | v e / a---b---c---d branche 'master' (se réfère au commit 'd') ^ | tag 'v2.0' (se réfère au commit 'b')
Il y a maintenant un nouveau commit e
mais il est référencé seulement par HEAD
. Un autre commit peut bien sûr être ajouté dans cet état :
$ edit; git add; git commit HEAD (se réfère au commit 'f') | v e---f / a---b---c---d branche 'master' (se réfère au commit 'd') ^ | tag 'v2.0' (se réfère au commit 'b')
En fait, toutes les opérations normales de Git peuvent être exécutées. Mais, regardons ce qui arrive quand master
est extraite :
$ git checkout master HEAD (se réfère au branch 'master') e---f | / v a---b---c---d branche 'master' (se réfère au commit 'd') ^ | tag 'v2.0' (se réfère au commit 'b')
Il est important de rĂ©aliser qu’Ă ce moment, rien ne fait rĂ©fĂ©rence au commit f
. Finalement, le commit f
(et par extension le commit e
) sera supprimĂ© par le processus de ramasse-miette rĂ©gulier de Git, Ă moins de crĂ©er une rĂ©fĂ©rence avant que cela n’arrive. Si vous n’avez pas encore quittĂ© le commit f
, une des commandes suivantes permet de créer une référence sur lui :
$ git checkout -b foo # ou "git switch -c foo" (1) $ git branch foo (2) $ git tag foo (3)
-
crée une nouvelle branche
foo
qui fait référence au commitf
, puis met Ă jourHEAD
pour faire référence à la branchefoo
. En d’autres termes, l’Ă©tat ne sera plus enHEAD
détachée après cette commande. -
crée aussi une nouvelle branche
foo
qui fait référence au commitf
mais laisseHEAD
détachée. -
crée une nouvelle étiquette
foo
qui fait référence au commitf
, en laissantHEAD
détachée.
Si nous ne sommes plus sur f
, alors nous devons d’abord retrouver son nom d’objet (typiquement en utilisant git reflog), puis nous pouvons crĂ©er une rĂ©fĂ©rence dessus. Par exemple, pour voir les deux derniers commits sur lesquels HEAD
pointait, nous pouvons utiliser l’une des commandes suivantes :
$ git reflog -2 HEAD # ou $ git log -g -2 HEAD
DÉSAMBIGUĂŹSATION D’ARGUMENT
Quand il n’y a qu’un argument fourni et qu’il n’est pas --
(par exemple git checkout abc
) et quand l’argument est Ă la fois un <arbre-esque>
valide (par exemple une branche abc
existe) et un <spĂ©cificateur_de_chemin> valide (par exemple un fichier ou un rĂ©pertoire du nom de « abc » existe), Git vous demandera gĂ©nĂ©ralement de lever l’ambiguĂŻtĂ©. Du fait qu’extraire une branche est une opĂ©ration très commune, cependant, git checkout abc
considère « abc » comme un <arbre-esque> dans une telle situation. Utilisez git checkout -- <spécificateur_de_chemin>
si vous voulez extraire ces chemins depuis l’index.
EXEMPLES
1. Chemins
La séquence suivante extrait la branche master
, ramène le fichier Makefile
à deux révisions en arrière, supprime hello.c
par erreur et le rĂ©cupère de l’index.
$ git checkout master (1) $ git checkout master~2 Makefile (2) $ rm -f hello.c $ git checkout hello.c (3)
-
bascule de branche
-
prend un fichier depuis un autre commit
-
restaure
hello.c
depuis l’index
Si vous souhaitez extraire tous les fichiers source C de l’index, vous pouvez lancer
$ git checkout -- '*.c'
Notez les guillemets autour de *.c
. Le fichier hello.c
sera aussi extrait, mĂŞme s’il n’est plus dans l’arbre de travail, parce que le patron de fichier est utilisĂ© pour trouver les entrĂ©es dans l’index (et non dans l’arbre de travail par le shell).
Si vous avez une branche qui s’appelle malheureusement hello.c
, cette étape pourrait être confondue avec une instruction de basculer sur cette branche. Vous devriez alors plutôt écrire :
$ git checkout -- hello.c
2. Fusion
Après avoir travaillé dans la mauvaise branche, basculer sur la branche correcte serait réalisé par :
$ git checkout monsujet
Cependant, votre « fausse » branche et votre branche correcte monsujet
peuvent ĂŞtre diffĂ©rentes par les fichiers que vous avez modifiĂ©s localement, auquel cas l’extraction ci-dessus Ă©chouerait comme ceci :
$ git checkout monsujet error: Vos modifications locales aux fichiers suivants seraient écrasées par l'extraction :
Vous pouvez fournir l’option -m
à la commande, ce qui essaierait une fusion à trois points :
$ git checkout -m monsujet Fusion automatique de frotz
Après cette fusion à trois points, les modifications locales ne sont pas enregistrées dans votre index, donc git diff
vous montrerait ce qui a changé depuis le sommet de la nouvelle branche.
3. Conflit de fusion
Quand un conflit de fusion arrive pendant un basculement de branche avec l’option -m
, vous devriez voir quelque chose comme :
$ git checkout -m mytopic Fusion automatique de frotz CONFLIT (contenu): Conflit de fusion dans frotz fatal: merge program failed
Ă€ ce stade, git diff
affiche les modifications proprement fusionnĂ©es comme dans l’exemple prĂ©cĂ©dent, ainsi que les modifications en conflit. Éditez et rĂ©solvez le conflit et marquez-le rĂ©solu avec git add
comme d’habitude :
$ edit frotz $ git add frotz
CONFIGURATION
Warning
|
Missing See original version for this content. |
Warning
|
Missing See original version for this content. |
GIT
Fait partie de la suite git[1]
TRADUCTION
Cette page de manuel a été traduite par Jean-Noël Avila <jn.avila AT free DOT fr> et les membres du projet git-manpages-l10n. Veuillez signaler toute erreur de traduction par un rapport de bogue sur le site https://github.com/jnavila/git-manpages-l10n .