web-dev-qa-db-fra.com

Est-il possible de prévisualiser le contenu de stash dans git?

Je range souvent mon travail pour plus tard, puis d’autres choses me parviennent et, quelques semaines plus tard, je souhaite inspecter la réserve et déterminer les modifications qu’elle apporterait si je l’appliquais à l’arbre de travail dans son état actuel.

Je sais que je peux faire une différence git sur la réserve, mais cela me montre toutes les différences entre l’arbre de travail et la réserve, alors que je suis simplement intéressé de savoir quelle application de la réserve va changer.

Comment puis-je faire ceci?

424
Benjol

git stash show vous montrera les fichiers qui ont changé dans votre cachette la plus récente. Vous pouvez ajouter l'option -p pour afficher le diff.

git stash show -p

Si la cachette qui vous intéresse n’est pas la plus récente, ajoutez le nom de la cachette à la fin de la commande:

git stash show -p stash@{2}
585
Jlew

Pour afficher une liste actuelle de stock, utilisez

git stash list

Vous devriez pouvoir voir une liste, telle que

stash@{0}: WIP on ...
stash@{1}: ...
stash@{2}: ...
...

Pour afficher les différences sur l’un de ces stash, utilisez la commande git stash show -p stash@{n}

77
segfault

Je suis un fan de l'interface graphique de gitk qui permet de visualiser les dépôts git. Vous pouvez voir le dernier article caché avec:

gitk stash

Vous pouvez également utiliser l’affichage de n’importe laquelle de vos modifications stockées (répertoriées par git stash list). Par exemple:

gitk stash@{2}

Dans la capture d'écran ci-dessous, vous pouvez voir la cachette en tant que commit en haut à gauche, quand et d'où elle vient dans l'historique des commit, la liste des fichiers modifiés en bas à droite et le diff ligne par ligne en bas -la gauche. Pendant que la cachette est toujours cachée.

gitk viewing a stash

28
Jeff Ward

Pour afficher toutes les modifications dans une réserve non décomposée:

git stash show -p stash@{0}

Pour afficher les modifications d'un fichier particulier dans une réserve non décomposée:

git diff HEAD stash@{0} -- path/to/filename.php
16
Wesley Musgrove

En appliquant simplement le stash en utilisant git stash apply? Cela ne supprime pas la réserve, vous pouvez donc réinitialiser votre arbre de travail sans perdre la tâche cachée, si vous n'aimez pas les modifications. Et si vous les aimez, vous pouvez simplement supprimer la réserve avec git stash drop.

12
lunaryorn

Au-delà de la recommandation de gitk dans Est-il possible de prévisualiser le contenu de stash dans git? vous pouvez installer tig et appeler tig stash. Ce programme libre/ouvert console vous permet également de choisir le stock à comparer.

5
Bruce

Vous pouvez afficher la liste de tous les disques à l'aide de la commande suivante: 

$ git stash list

stash@{0}: WIP on dev: ddd4d75 spelling fix

stash@{1}: WIP on dev: 40e65a8 setting width for messages

......

......

......


stash@{12}: WIP on dev: 264fdab added token based auth

Le plus récent est le premier.

Vous pouvez simplement sélectionner index n of stash fourni dans la liste ci-dessus et utiliser la commande suivante pour afficher les détails cachés

git stash show -p stash@{3}

De même,

git stash show -p stash@{n}

Vous pouvez également vérifier diff en utilisant la commande: 

git diff HEAD stash@{n} -- /path/to/file
3
Vishvajit Pathak

J'utilise ceci pour voir toutes mes photos avec la mise en surbrillance des différences de couleur (sur Fedora 21):

git stash list | 
  awk -F: '{ print "\n\n\n\n"; print $0; print "\n\n"; 
  system("git -c color.ui=always stash show -p " $1); }' | 
  less -R

(Adapté de Git: voir ce qu'il y a dans une cachette sans l'appliquer )

3
seanf

Lorsque cette question a été posée pour la première fois, cela n’était peut-être pas une option, mais si vous utilisez PyCharm, vous pouvez utiliser l’outil UnStash Changes (VCS-> Git-> UnStash Changes ...). Cela vous permet d’afficher la liste des modifications stockées, ainsi que d’afficher, de supprimer, d’effacer ou d’appliquer (dans une nouvelle branche si vous le souhaitez):

 Unstash Changes Window

et affichez les fichiers modifiés par stock:

 Paths Affected Window

ainsi que des diffs par fichier. Dans les diffs, vous pouvez sélectionner les modifications individuelles à appliquer à partir des modifications stockées dans la branche active (à l'aide du chevron pointant vers la gauche):

 enter image description here

2
hlongmore

Premièrement, nous pouvons utiliser la liste de réserve git pour obtenir tous les éléments de réserve:

$git stash list
stash@{0}: WIP on ...
stash@{1}: WIP on ....
stash@{2}: WIP on ...

Ensuite, nous pouvons utiliser git stash show stash@{N} pour vérifier les fichiers sous une cachette spécifique N. Si nous le tirons, nous pouvons obtenir:

$ git stash show stash@{2}
fatal: ambiguous argument 'stash@2': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'

La raison en est peut-être que le shell mange des accolades et que git voit stash@2 et non stash@{2}. Et pour résoudre ce problème, nous devons utiliser des guillemets simples pour les accolades, comme suit:

git stash show stash@'{2'}
com/Java/myproject/my-xml-impl.xml                     | 16 ++++++++--------
com/Java/myproject/MyJavaClass.Java                    | 16 ++++++++--------
etc.
2
i_am_zero

oui le meilleur moyen de voir ce qui est modifié est de sauvegarder dans un fichier comme ça

git stash show -p stash@{0} > stash.txt
2
Walterwhites

J'aime la façon dont gitk peut vous montrer exactement ce qui n'a pas été suivi ou assis dans l'index, mais par défaut, il affichera les "commits" de la cachette au milieu de tous vos autres commits sur la branche en cours.

L'astuce consiste à exécuter gitk comme suit:

gitk "stash@{0}^!"

(La citation est là pour que cela fonctionne dans Powershell, mais de cette façon, cela devrait également fonctionner dans d'autres obus.)

Si vous recherchez cette syntaxe dans la page d'aide de gitrevisions , vous trouverez ce qui suit:

La notation r1^! inclut commit r1 mais exclut tous ses parents. En elle-même, cette notation désigne le simple commit r1 .

Cela mettra apparemment gitk dans un tel mode que seuls les parents immédiats du commit sélectionné sont affichés, ce qui est exactement ce que j'aime.


Si vous voulez aller plus loin et lister tous les stash, alors vous pouvez lancer ceci:

gitk `git stash list '--pretty=format:%Gd^!'`

(Ces guillemets simples à l'intérieur des backticks sont nécessaires pour apaiser Bash, sinon il se plaint du point d'exclamation)

Si vous utilisez Windows et utilisez cmd ou Powershell:

gitk "--argscmd=git stash list --pretty=format:%Gd^!"
1
JBert

Afficher toutes les cachettes

Noms de fichiers uniquement:

for i in $(git stash list --format="%Gd") ; do echo "======$i======"; git stash show $i; done

Contenu complet du fichier dans tous les stash:

for i in $(git stash list --format="%Gd") ; do echo "======$i======"; git stash show -p $i; done

Vous obtiendrez une sortie colorized avec laquelle vous pourrez feuilleter space (forward) et b (en arrière), et q pour fermer le téléavertisseur de la réserve actuelle. Si vous préférez l'avoir dans un fichier, ajoutez > stashes.diff à la commande.

1
ccpizza

Afficher la liste des modifications stockées

git stash list

Pour afficher la liste des fichiers modifiés dans une réserve particulière 

git stash show -p stash@{0} --name-only

Pour visualiser un fichier particulier en cachette

git show stash@{0} path/to/file
0
Bharat

En plus des réponses existantes qui suggèrent d’utiliser (pour montrer le diff du dernier au dernier caché)

git stash show -p stash@{2}

Notez que dans la documentation git-stash , il est écrit que

Vous pouvez également référencer les images masquées en spécifiant uniquement leur index (par exemple, l'entier n est équivalent à stash@{n}).

Par conséquent, il est également possible d'utiliser (c'est équivalent à la commande ci-dessus)

git stash show -p 2

Ce qui devrait également éviter certains problèmes de Powershell .

0
user202729

La commande suivante peut être utilisée pour extraire les différences de changements stashedestestimé n'importe quel autre stash ou commit, branche ou HEAD.

git stash show
git show
git diff
git difftool

Voyons comment nous pouvons utiliser chacune des commandes mentionnées ci-dessus.

  1. git Stash Show

La commande simple git stash show donne un très bref résumé des modifications de fichier, mais ne montre pas la diff de modifications par rapport à HEAD actuel.

  1. git show

La commande git-show permet de voir différents types d'objets.

La commande git-show n'est pas seulement utilisée pour visualiser les changements de cache, mais également pour voir un ou plusieurs objets tels que des blobs, des arbres, des balises et des commits.

  1. git diff

La commande git-diff est également une commande commune utilisée pour afficher les modifications entre les validations, les validations et les arbres de travail, etc.

Par défaut, git diff affichera le diff du stash sélectionné par rapport à l'état actuel du référentiel (fichiers modifiés), sauf si une autre référence de stash ou commit est spécifiée.

Pour obtenir la différence entre le top stash stash @ {0} et la branche principale:

$ git diff stash @ {0} master

Affiche uniquement les noms de fichier non diff des modifications:

$ git diff - cachette nominative @ {0} maître

Voir le diff entre les stash sélectionnés pour un fichier sélectionné:

$ git diff stash @ {0} ^ 1 stash @ {0} -

  1. git difftool

La commande git-difftool peut également être utilisée pour trouver un diff entre le stash sélectionné et le commit ou la branche ou le stash sélectionné

Voyez la différence entre les deux derniers stash:

$ git difftool stash @ {0} stash @ {0} ^ 1

git difftool --dir-diff stash @ {0} stash @ {0} ^ 1

Résumé:

Commandes utiles pour extraire le diff de la sélection sélectionnée stit git stash show, git show, git diff, git difftool.

Voyez la différence en utilisant la commande git stash show,

git stash show -p stash @ {0}

Voir les changements dans le stash en utilisant la commande git show,

git show stash @ {1}

Voyez la différence entre le dernier stash et le commit sélectionné à l'aide de la commande git diff,

git diff stash @ {0}

Références:

https://howto.lintel.in/how-to-see-stashed-changes-using-git-stash/

https://git-scm.com/docs/git-show

https://git-scm.com/docs/git-stash

0
hxysayhi