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.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow