Peut git faire une diff de la copie de travail avec stash

Comment puis-je comparer ma copie de travail actuelle avec une cachette?

mon cas d'utilisation: ma copie de travail contient déjà un sous-ensemble des modifications dans mon stash@{0} , mais je ne veux pas appliquer tous les modifications dans stash@{0} . Je veux faire une différence pour aider à déterminer quels changements souhaitables dans stash@{0} sont toujours absents de ma copie de travail.

41
demandé sur Max Wallace 2011-11-09 03:45:08

8 réponses

Si c'était votre dernière cachette, "151900920 pourra le faire. Si non, vous pouvez utiliser git stash list pour obtenir l'index de quelle cachette vous voulez comparer.

31
répondu Andy 2011-11-08 23:53:05

je pense que OP voulait la réponse pour voir quelle différence la cachette contient autre que les fichiers présents dans la copie de travail.

la commande suivante indique ce que contient stash.

git stash show -p stash@{0}
15
répondu niksvp 2014-03-19 04:48:54

si votre arbre de travail est sale , vous pouvez le comparer à une planque en commettant d'abord l'arbre de travail sale, puis en le comparant à la planque. Par la suite, vous pouvez vouloir annuler le commit de votre arbre de travail (pour garder votre histoire propre).

  • Valider votre sale arbre de travail:

    git add .
    git commit -m "Dirty commit"
    
  • Diff la cachette avec qui s'engager:

    git diff stash@{0}
    
  • ensuite, vous pouvez revenir sur la propagation, et la remettre dans le dir de travail:

    git reset --soft HEAD~1
    git reset .
    

Maintenant vous avez diffusé l'arbre sale travaillant avec votre cachette, et êtes de retour à l'endroit où vous étiez initialement.

7
répondu Magne 2016-07-27 00:21:18

vous ne pouvez pas faire cela sans commettre ou cacher votre copie de travail. L'arrimage est probablement moins risqué:

git add -A                    # Stage all changes in your working copy.
git stash save --keep-index   # Stash your working copy and leave it intact
git diff stash@{0} stash@{1}

pour vous débarrasser de la cachette que vous venez de faire pour le plaisir de diffing, utilisez git stash pop ou git stash drop stash@{0} .

si vous voulez utiliser un commit à la place, voir la réponse de @Magne .

4
répondu Max Wallace 2017-05-23 12:18:15

vous pouvez utiliser la commande Unix diff en conjonction avec deux commandes Git comme suit:

diff <(git diff) <(git stash show -p stash@{0})

bien sûr, vous pouvez changer la stash@{0} en n'importe quelle stash que vous voulez. Cette commande est en train de comparer le répertoire de travail réel (git diff) avec l'une de vos caches.

mise à JOUR

vous pouvez également installer colordiff et voir beaucoup meilleur résultat:

Installation:

  • Ubuntu/Debian: sudo apt-get install colordiff
  • OS X: brew install colordiff

et changez la commande en:

colordiff <(git diff) <(git stash show -p stash@{0})
1
répondu Mitakos Petros 2016-12-12 14:17:24

Oui vous pouvez utiliser git stash show -p , cochez cette case Git diff contre une cachette pour plus d'information.

1
répondu Emran Bader 2017-05-23 12:34:40

pas sûr de ce que l'OP voulait, mais je l'utilise pour voir ce que le jeu de diff réel de la cachette est:

git difftool stash@{0}^!

ou

git diff stash@{0}^!

ou

git diff stash@{0}^! > patchfile

0
répondu Wayne Walker 2015-12-14 19:45:50

De faire un diff d'un fichier ou d'un dossier présent dans le répertoire de travail avec une cachette que vous pouvez faire:

git diff stash@{0} -- /path/to/fileorfolder

Ici stash@{0} just represent a commit HASH, so it works exactly how git diff works. stash@{0} " n'est qu'un gestionnaire.

0
répondu alpha_989 2018-06-19 16:06:19