Recherche…
Syntaxe
-
git stash list [<options>]
-
git stash show [<stash>]
-
git stash drop [-q|--quiet] [<stash>]
-
git stash ( pop | apply ) [--index] [-q|--quiet] [<stash>]
-
git stash branch <branchname> [<stash>]
-
git stash [save [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet] [-u|--include-untracked] [-a|--all] [<message>]]
-
git stash clear
-
git stash create [<message>]
-
git stash store [-m|--message <message>] [-q|--quiet] <commit>
Paramètres
Paramètre | Détails |
---|---|
montrer | Affiche les modifications enregistrées dans le cache sous forme de diff entre l'état masqué et son parent d'origine. Lorsqu'aucun <stash> n'est donné, affiche le dernier. |
liste | Listez les caches que vous avez actuellement. Chaque stash est répertorié avec son nom (par exemple, stash @ {0} est le dernier stash, stash @ {1} est celui précédent, etc.), le nom de la branche qui était à l’origine du stash Description de la validation sur laquelle la réserve était basée. |
pop | Supprimez un seul état caché de la liste de dissimulation et appliquez-le au-dessus de l'état actuel de l'arborescence de travail. |
appliquer | Comme la pop , mais ne supprimez pas l'état de la liste de réserve. |
clair | Supprimez tous les états cachés. Notez que ces états seront alors sujets à l'élagage, et peuvent être impossibles à récupérer. |
laissez tomber | Supprimer un seul état caché de la liste de réserve. Lorsqu'aucun <stash> n'est donné, il supprime le dernier. c.-à-d. stash @ {0}, sinon <stash> doit être une référence de journal stash valide du formulaire stash @ {<revision>}. |
créer | Créez un stash (qui est un objet de validation normal) et retournez son nom d'objet, sans le stocker nulle part dans l'espace de noms de référence. Ceci est destiné à être utile pour les scripts. Ce n'est probablement pas la commande que vous souhaitez utiliser; voir "enregistrer" ci-dessus. |
le magasin | Stocker un stock donné créé via git stash create (qui est un commit de fusion en suspens) dans la réserve stash, mettant à jour le stog reflog. Ceci est destiné à être utile pour les scripts. Ce n'est probablement pas la commande que vous souhaitez utiliser; voir "enregistrer" ci-dessus. |
Remarques
Le stashing nous permet d'avoir un répertoire de travail propre sans perdre aucune information. Ensuite, il est possible de commencer à travailler sur quelque chose de différent et / ou de changer de branche.
Qu'est-ce que Stashing?
Lorsque vous travaillez sur un projet, vous pouvez être à mi-chemin d'un changement de branche lorsque le bogue est déclenché contre maître. Vous n'êtes pas prêt à commettre votre code, mais vous ne voulez pas non plus perdre vos modifications. C'est là que git stash
est utile.
Exécutez git status
sur une branche pour afficher vos modifications non validées:
(master) $ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: business/com/test/core/actions/Photo.c
no changes added to commit (use "git add" and/or "git commit -a")
Ensuite, lancez git stash
pour enregistrer ces modifications dans une pile:
(master) $ git stash
Saved working directory and index state WIP on master:
2f2a6e1 Merge pull request #1 from test/test-branch
HEAD is now at 2f2a6e1 Merge pull request #1 from test/test-branch
Si vous avez ajouté des fichiers à votre répertoire de travail, ils peuvent également être cachés. Vous devez juste les mettre en scène d'abord.
(master) $ git stash
Saved working directory and index state WIP on master:
(master) $ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
NewPhoto.c
nothing added to commit but untracked files present (use "git add" to track)
(master) $ git stage NewPhoto.c
(master) $ git stash
Saved working directory and index state WIP on master:
(master) $ git status
On branch master
nothing to commit, working tree clean
(master) $
Votre répertoire de travail ne contient plus aucune modification apportée. Vous pouvez le voir en relançant le git status
:
(master) $ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean
Pour appliquer le tout dernier cache, lancez git stash apply
(vous pouvez également appliquer et supprimer le dernier fichier modifié avec git stash pop
):
(master) $ git stash apply
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: business/com/test/core/actions/Photo.c
no changes added to commit (use "git add" and/or "git commit -a")
Notez, cependant, que le stockage ne retient pas la branche sur laquelle vous travailliez. Dans les exemples ci-dessus, l'utilisateur se trouvait sur Master . S'ils passent à la branche dev , dev , et exécutent git stash apply
la dernière réserve est placée dans la branche dev .
(master) $ git checkout -b dev
Switched to a new branch 'dev'
(dev) $ git stash apply
On branch dev
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: business/com/test/core/actions/Photo.c
no changes added to commit (use "git add" and/or "git commit -a")
Créer une cachette
Enregistrez l'état actuel du répertoire de travail et l'index (également appelé zone de transfert) dans une pile de stashes.
git stash
Pour inclure tous les fichiers non suivis dans la réserve, utilisez les --include-untracked
ou -u
.
git stash --include-untracked
Inclure un message avec votre cachet pour le rendre plus facilement identifiable ultérieurement
git stash save "<whatever message>"
Pour laisser la zone de mise en --keep-index
dans l'état actuel après le --keep-index
utilisez les --keep-index
ou -k
.
git stash --keep-index
Liste des caches enregistrés
git stash list
Cela listera tous les cachets dans la pile dans l'ordre chronologique inverse.
Vous obtiendrez une liste qui ressemble à ceci:
stash@{0}: WIP on master: 67a4e01 Merge tests into develop
stash@{1}: WIP on master: 70f0d95 Add user role to localStorage on user login
Vous pouvez faire référence à un cache spécifique par son nom, par exemple stash@{1}
.
Montrer la cachette
Affiche les modifications enregistrées dans la dernière réserve
git stash show
Ou une cachette spécifique
git stash show stash@{n}
Pour afficher le contenu des modifications enregistrées pour la réserve spécifique
git stash show -p stash@{n}
Supprimer la cachette
Supprimer toutes les cachettes
git stash clear
Supprime la dernière cachette
git stash drop
Ou une cachette spécifique
git stash drop stash@{n}
Appliquez et enlevez la cachette
Pour appliquer la dernière réserve et la retirer de la pile, tapez:
git stash pop
Pour appliquer une réserve spécifique et la retirer de la pile - tapez:
git stash pop stash@{n}
Appliquer stash sans le retirer
Applique la dernière cachette sans la retirer de la pile
git stash apply
Ou une cachette spécifique
git stash apply stash@{n}
Récupération des modifications antérieures de la réserve
Pour obtenir votre plus récente réserve après avoir exécuté git stash, utilisez
git stash apply
Pour voir une liste de vos caches, utilisez
git stash list
Vous obtiendrez une liste qui ressemble à quelque chose comme ça
stash@{0}: WIP on master: 67a4e01 Merge tests into develop
stash@{1}: WIP on master: 70f0d95 Add user role to localStorage on user login
Choisissez un autre git stash à restaurer avec le numéro qui apparaît pour la réserve que vous voulez
git stash apply stash@{2}
Cachette partielle
Si vous souhaitez ne conserver que quelques différences dans votre jeu de travail, vous pouvez utiliser une réserve partielle.
git stash -p
Et puis sélectionnez interactivement les objets à cacher.
A partir de la version 2.13.0, vous pouvez également éviter le mode interactif et créer un cache partiel avec pathspec en utilisant le nouveau mot - clé push .
git stash push -m "My partial stash" -- app.config
Appliquer une partie d'une cachette avec la caisse
Vous avez fait une réserve et souhaitez ne récupérer que certains des fichiers de cette réserve.
git checkout stash@{0} -- myfile.txt
Stashing interactif
Stashing prend l'état sale de votre répertoire de travail, c'est-à-dire vos fichiers de suivi modifiés et vos modifications par étapes, et les enregistre sur une pile de modifications inachevées que vous pouvez réappliquer à tout moment.
Stocker uniquement les fichiers modifiés:
Supposons que vous ne vouliez pas cacher les fichiers mis en scène et que vous ne gardiez que les fichiers modifiés pour pouvoir utiliser:
git stash --keep-index
Qui ne cachera que les fichiers modifiés.
Stocker les fichiers non suivis:
Stash n'enregistre jamais les fichiers non suivis, il ne cache que les fichiers modifiés et mis en scène. Donc, supposez que si vous avez besoin de cacher les fichiers non suivis, alors vous pouvez utiliser ceci:
git stash -u
Cela permettra de suivre les fichiers non suivis, mis en scène et modifiés.
Ne conservez que quelques modifications particulières:
Supposons que vous ne deviez cacher qu'une partie du code du fichier ou seulement certains fichiers de tous les fichiers modifiés et cachés, vous pouvez le faire comme ceci:
git stash --patch
Git ne stocke pas tout ce qui est modifié, mais vous demande de manière interactive quelles modifications vous souhaitez conserver et que vous souhaitez conserver dans votre répertoire de travail.
Déplacez votre travail en cours vers une autre branche
Si, tout en travaillant, vous réalisez que vous êtes sur une mauvaise branche et que vous n’avez pas encore créé de commits, vous pouvez facilement déplacer votre travail pour corriger une branche en utilisant un cache:
git stash
git checkout correct-branch
git stash pop
Rappelez-vous que git stash pop
appliquera la dernière réserve et la supprimera de la liste de stockage. Pour garder la cachette dans la liste et ne concerne que certaines branches, vous pouvez utiliser:
git stash apply
Récupérer une cachette tombée
Si vous venez juste de l'ouvrir et que le terminal est toujours ouvert, vous aurez toujours la valeur de hachage imprimée par git stash pop
à l'écran:
$ git stash pop
[...]
Dropped refs/stash@{0} (2ca03e22256be97f9e40f08e6d6773c7d41dbfd1)
(Notez que la chute de git produit également la même ligne.)
Sinon, vous pouvez le trouver en utilisant ceci:
git fsck --no-reflog | awk '/dangling commit/ {print $3}'
Cela vous montrera tous les commits sur les bouts de votre graphe de commit qui ne sont plus référencés depuis une branche ou une balise - chaque commit perdu, y compris chaque commit de cache que vous avez déjà créé, sera quelque part dans ce graphique.
La manière la plus simple de trouver l’engagement que vous souhaitez est probablement de passer cette liste à gitk
:
gitk --all $( git fsck --no-reflog | awk '/dangling commit/ {print $3}' )
Cela lancera un navigateur de référentiel vous montrant chaque engagement unique dans le référentiel , qu'il soit accessible ou non.
Vous pouvez remplacer gitk
par quelque chose comme git log --graph --oneline --decorate
si vous préférez un graphique agréable sur la console par rapport à une application GUI séparée.
Pour repérer les commits cachés, recherchez les messages de validation de ce formulaire:
WIP sur somebranch : commithash Un ancien message de commit
Une fois que vous connaissez le hachage de la validation souhaitée, vous pouvez l’appliquer comme une réserve:
git stash apply $stash_hash
Ou vous pouvez utiliser le menu contextuel de gitk
pour créer des branches pour tous les commits inaccessibles qui vous intéressent. Après cela, vous pouvez faire ce que vous voulez avec tous les outils habituels. Lorsque vous avez terminé, il suffit de faire sauter ces branches à nouveau.