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.43.0 11/20/23
- 2.42.1 no changes
- 2.42.0 08/21/23
- 2.39.1 → 2.41.0 no changes
- 2.39.0 12/12/22
- 2.38.1 → 2.38.5 no changes
- 2.38.0 10/02/22
- 2.35.1 → 2.37.7 no changes
- 2.35.0 01/24/22
- 2.32.1 → 2.34.8 no changes
- 2.32.0 06/06/21
- 2.31.1 → 2.31.8 no changes
- 2.31.0 03/15/21
- 2.26.1 → 2.30.9 no changes
- 2.26.0 03/22/20
SYNOPSIS
git stash list [<options>] git stash show [<options>] [<remisage>] git stash drop [-q|--quiet] [<remisage>] git stash ( pop | apply ) [--index] [-q|--quiet] [<remisage>] git stash branch <nom-de-branche> [<remisage>] git stash [push [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet] [-u|--include-untracked] [-a|--all] [-m|--message <message>] [--pathspec-from-file=<fichier> [--pathspec-file-nul]] [--] [<spéc-de-chemin>…]] git stash clear git stash create [<message>] git stash store [-m|--message <message>] [-q|--quiet] <commit>
DESCRIPTION
Utilisez git stash
lorsque vous voulez enregistrer l’état actuel du
répertoire de travail et de l’index, mais que vous voulez revenir à un
répertoire de travail propre. La commande enregistre vos modifications
locales et rétablit le répertoire de travail pour qu’il corresponde au
commit HEAD
.
Les modifications remisées par cette commande peuvent être listées avec git
stash list
, inspectées avec git stash show
, et restaurées
(potentiellement au dessus d’un commit différent) avec git stash apply
.
Appeler git stash
sans aucun argument est équivalent à git stash push
.
Un remisage est par défaut listé comme "WIP sur nom-de-branche …", mais
vous pouvez donner un message plus descriptif sur la ligne de commande
lorsque vous en créez un.
Le dernier remisage que vous avez créé est stocké dans refs/stash
; les
anciens remisages se trouvent dans le reflog de cette référence et peuvent
être nommés en utilisant la syntaxe habituelle du reflog (par exemple
stash@{0}
est le dernier remisage créé, stash@{1}
est celui qui le
précède, stash@{2.hours.ago}
est également possible). On peut également
référencer les remisages en spécifiant uniquement l’index du remisage (par
exemple, l’entier n
est équivalent à stash@{n}
).
COMMANDES
- push [-p|--patch] [-k|--[no-]keep-index] [-u|--include-untracked] [-a|--all] [-q|--quiet] [-m|--message <message>] [--pathspec-from-file=<fichier> [--pathspec-file-nul]] [--] [<spéc-de-chemin>…]
-
Enregistre vos modifications locales dans une nouvelle "entrée de remisage" et les ramène dans HEAD (dans l’arbre de travail et dans l’index). La partie <message> est facultative et donne la description ainsi que l’état du remisage.
Pour faire rapidement un instantané, vous pouvez omettre "push". Dans ce mode, les arguments de non-optionnels ne sont pas autorisés pour empêcher une sous-commande mal orthographiée de faire une entrée indésirable dans le remisage. Les deux exceptions sont
stash -p
qui agit comme alias pourpush -p
et les éléments spéc-de-chemin, qui sont autorisés après un double trait d’union--
pour la désambiguïsation. - save [-p|--patch] [-k|--[no-]keep-index] [-u|--include-untracked] [-a|--all] [-q|--quiet] [<message>]
-
Cette option est déconseillée au profit de l’option 'git stash push". Elle diffère de "stash push" en ce qu’elle ne peut pas prendre de spéc-de-chemin. Au lieu de cela, tous les arguments non liés à une option sont concaténés pour former le message de remisage.
- list [<options>]
-
Dresser la liste des entrées de remisage que vous avez actuellement. Chaque entrée de remisage est listée avec son nom (par exemple,
stash@{0}
est la dernière entrée,stash@{1}
est l’entrée précédente, etc.), le nom de la branche en cours au moment où l’entrée a été faite, et une courte description du commit sur lequel l’entrée est basée.stash@{0}: WIP on submit: 6ebd0e2... Update git-stash documentation stash@{1}: On master: 9cc0589... Add git-stash
La commande prend les options applicables à la commande git log pour contrôler ce qui est affiché et comment. Voir git-log[1].
- show [<options>] [<remisage>]
-
Afficher les modifications enregistrées dans l’entrée de remisage comme une différence entre le contenu du remisage et le commit tel qu’il était quand l’entrée de remisag a été créée pour la première fois. Par défaut, la commande affiche le diffstat, mais elle accepte tout format connu de git diff (par exemple,
git stash show -p stash@{1}
pour afficher la deuxième entrée la plus récente sous forme de rustine). Vous pouvez utiliser les variables de configuration stash.showStat et/ou stash.showPatch pour modifier le comportement par défaut. - pop [--index] [-q|--quiet] [<remise>]
-
Supprimer un seul remisage de la liste des remisages et l’appliquer par dessus l’état de l’arbre de travail actuel, c’est-à-dire faire l’opération inverse de
git stash push
. Le répertoire de travail doit correspondre à l’index.L’application de l’état peut échouer en cas de conflit ; dans ce cas, il n’est pas retiré de la liste de remisages. Vous devez résoudre les conflits à la main et appeler ensuite
git stash drop
manuellement. - apply [--index] [-q|--quiet] [<remise>]
-
Comme
pop
, mais ne pas supprimer l’état de la liste de remisages. Contrairement àpop
,<stash>
peut être n’importe quel commit qui ressemble à un commit créé parstash push
oustash create
. - branch <nom-de-branche> [<remisage>]
-
Créer et extraire une nouvelle branche nommée
<nom-de-branche>
à partir du commit où le<remisage>
a été créé à l’origine, appliquer les modifications enregistrées dans le<remisage>
au nouvel arbre de travail et à l’index. Si cela réussit, et que le<remisage>
est une référence de la formestash@{<révision>}
, abandonner alors le<remisage>
.Ceci est utile si la branche sur laquelle vous avez lancé
git stash push
a suffisamment changé pour quegit stash apply
échoue à cause de conflits. Puisque l’entrée de remisage est appliquée sur le commit qui était HEAD au moment oùgit stash
a été lancé, elle restaure l’état d’origine remisé sans conflit. - clear
-
Supprimer toutes les entrées de remisage. Notez que ces entrées seront alors soumises à un élagage et pourraient être impossibles à récupérer (voir "Exemples" ci-dessous pour une stratégie possible).
- drop [-q|--quiet] [<remisage>]
-
Supprimer une seule entrée de la liste des entrées de remisage.
- create
-
Créer une entrée de remisage (qui est un objet commit régulier) et renvoyer son nom d’objet, sans le stocker nulle part dans l’espace de noms de références. Ceci est destiné à être utilisé par les scripts. Ce n’est probablement pas la commande que vous voulez utiliser ; voir "push" ci-dessus.
- store
-
Stocker un remisage donné créé via git stash create (qui est un commit de fusion en cours) dans la référence de remisage, en mettant à jour le reflog de remisage. Ceci est destiné à être utilisé par des scripts. Ce n’est probablement pas la commande que vous souhaitez utiliser ; voir "push" ci-dessus.
OPTIONS
- -a
- --all
-
Cette option n’est valable que pour les commandes
push
etsave
.Tous les fichiers ignorés et non tracés sont également remisés puis nettoyés avec
git clean
. - -u
- --include-untracked
-
Cette option n’est valable que pour les commandes
push
etsave
.Tous les fichiers non suivis sont également remisé puis nettoyés avec
git clean
. - --index
-
Cette option n’est valable que pour les commandes
pop
etapply
.Tenter de rétablir non seulement les modifications de l’arbre de travail, mais aussi celles de l’index. Cependant, cela peut échouer, lorsque vous avez des conflits (qui sont stockés dans l’index, où vous ne pouvez donc plus appliquer les modifications telles qu’elles étaient à l’origine).
- -k
- --keep-index
- --no-keep-index
-
Cette option n’est valable que pour les commandes
push
etsave
.Tous les changements déjà ajoutés à l’index sont laissés intacts.
- -p
- --patch
-
Cette option n’est valable que pour les commandes
push
etsave
.Sélectionner interactivement les section à remiser à partir de la différence entre HEAD et l’arbre de travail. L’entrée de remisage est construite de manière à ce que son état d’index soit le même que celui de votre dépôt, et son arbre de travail ne contient que les modifications que vous avez sélectionnées de manière interactive. Les modifications sélectionnées sont ensuite inversées à partir de votre arbre de travail. Voir la section "Mode interactif" de git-add[1] pour savoir comment utiliser le mode
--patch
.L’option
--patch
implique--keep-index
. Vous pouvez utiliser l’option--no keep-index
pour passer outre. - --pathspec-from-file=<fichier>
-
Cette option n’est valide que pour la commande
push
.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
-
Cette option n’est valide que pour la commande
push
.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). - -q
- --quiet
-
Cette option n’est valable que pour les commandes
apply
,drop
,pop
,push
,save
,store
.Silencieux, supprimer les messages d’état.
- --
-
Cette option n’est valide que pour la commande
push
.Sépare le spécificateur de chemin et les options à des fins de désambiguïsation.
- <spécificateur de chemin>…
-
Cette option n’est valide que pour la commande
push
.La nouvelle entrée de remisage enregistre les états modifiés uniquement pour les fichiers qui correspondent au spécificateur de chemin. Les entrées d’index et les fichiers de l’arbre de travail sont ensuite ramenées à l’état de HEAD uniquement pour ces fichiers, également, laissant intacts les fichiers qui ne correspondent pas à la spécification du chemin.
Pour plus de détail, voir l’entrée spécificateur de chemin dans gitglossary[7].
- <remisage>
-
Cette option n’est valable que pour les commandes
apply
,branch
,drop
,pop
,show
.Une référence de la forme
stash@{<révision>}
. Lorsqu’aucun<remisage>
n’est donné, le dernier remisage est supposé (c’est-à-dire,stash@{0}
).
DISCUSSION
Une entrée de remisage est représentée par un commit dont l’arbre enregistre
l’état du répertoire de travail, et son premier parent est le commit à
HEAD
lorsque l’entrée a été créée. L’arborescence du second parent
enregistre l’état de l’index lorsque l’entrée est créée, et il est considéré
comme un enfant du commit HEAD
. Le graphique d’ascendance ressemble à
ceci :
.----W / / -----H----I
où H
est le commit HEAD
, I
est un commit qui enregistre l’état de
l’index, et W
est un commit qui enregistre l’état de l’arbre de travail.
EXEMPLES
- Tirer dans un arbre sale
-
Lorsque vous êtes au milieu de quelque chose, vous apprenez qu’il y a des changements en amont qui peuvent avoir un rapport avec ce que vous faites. Lorsque vos changements locaux n’entrent pas en conflit avec les changements en amont, un simple
git pull
vous permettra d’aller de l’avant.Cependant, il y a des cas où vos modifications locales entrent en conflit avec les changements en amont, et
git pull
refuse d’écraser vos modifications. Dans ce cas, vous pouvez remiser vos modifications, effectuer un tirage, puis les déstocker, comme ceci :$ git pull ... fichier foobar pas à jour, fusion impossible. $ git stash $ git pull $ git stash pop
- Interruption du flux de travail
-
Lorsque vous êtes au milieu de quelque chose, votre patron arrive et vous demande de réparer quelque chose immédiatement. Traditionnellement, vous faîtes un commit dans une branche temporaire pour stocker vos modifications et vous retournez dans votre branche d’origine pour effectuer la réparation d’urgence, comme ceci :
# ... travail, travail, travail ... $ git switch -c my_wip $ git commit -a -m "WIP" $ git switch master $ edit emergency fix $ git commit -a -m "Correction rapide" $ git switch my_wip $ git reset --soft HEAD^ # ... continue le travail ...
Vous pouvez utiliser git stash pour simplifier ce qui précède, comme ceci :
# ... travail, travail, travail ... $ git stash $ édition de la correction rapide $ git commit -a -m "Correction en catastrophe" $ git stash pop # ... continue le travail ...
- Test des commits partiels
-
Vous pouvez utiliser
git stash push --keep-index
lorsque vous voulez faire deux ou plusieurs commits à partir des modifications dans l’arbre de travail, et que vous voulez tester chaque modification avant de faire un commit :# ... travail, travail, travail ... $ git add --patch foo # ajouter seulement la première partie de l'index $ git stash push --keep-index # remiser toutes les autres modifications $ éditer/construire/tester la première partie $ git commit -m 'Première partie' # valider une modification complètement testée $ git stash pop # préparer à travailler sur les autres modifications # ... répéter les cinq tâches ci-dessus jusqu'à ce qu'il ne reste qu'un commit ... $ éditer/construire/tester le restant $ git commit foo -m 'Partie restante'
- Récupération des entrées de remisage qui ont été effacées/abandonnées par erreur
-
Si vous laissez tomber ou videz par erreur les entrées de remisage, elles ne peuvent pas être récupérées par les mécanismes de sécurité habituels. Cependant, vous pouvez essayer l’incantation suivante pour obtenir une liste des entrées de remisage qui sont toujours dans votre dépôt, mais qui ne sont plus accessibles :
git fsck --unreachable | grep commit | cut -d\ -f3 | xargs git log --merges --no-walk --grep=WIP
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 .