web-dev-qa-db-fra.com

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

Comment puis-je comparer ma copie de travail actuelle à une stash?

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 changements dans stash@{0}. Je veux faire un diff pour aider à déterminer les changements souhaitables dans stash@{0} sont toujours absents de ma copie de travail.

51
Laughing monster

S'il s'agissait de votre dernière sauvegarde, git diff stash@{0} le fera. Sinon, vous pouvez utiliser git stash list pour obtenir l'index de la cachette à laquelle vous souhaitez comparer.

36
Andy

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 montre ce que contient la cachette.

git stash show -p stash@{0}
14
niksvp

Vous ne pouvez pas le faire sans valider ou ranger votre copie de travail. Le stockage est probablement à moindre risque:

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 créer dans un souci de différence, utilisez git stash pop ou git stash drop stash@{0}.

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

9
Max Wallace

Si votre arbre de travail est sale, vous pouvez le comparer à une stash en validant d'abord l'arbre de travail sale, puis en le comparant à la stash. Ensuite, vous souhaiterez peut-être annuler la validation de votre arbre de travail (pour garder votre historique propre).

  • Engagez votre arbre de travail sale:

    git add .
    git commit -m "Dirty commit"
    
  • Diff la cachette avec ce commit:

    git diff stash@{0}
    
  • Ensuite, vous pouvez annuler le commit et le remettre dans le répertoire de travail:

    git reset --soft HEAD~1
    git reset .
    

Maintenant, vous avez différencié l'arbre de travail sale avec votre cachette et vous êtes revenu à l'endroit où vous étiez au départ.

9
Magne

Vous pouvez utiliser git stash show -l. Il montre ce que vous voulez sans stash ou commit supplémentaire.

3
MOHRE

Pour faire une différence entre un fichier ou un dossier présent dans le répertoire de travail et celui dans une stash, vous pouvez faire:

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

Ici stash@{0} représente simplement un HASH de validation, donc il fonctionne exactement comme git diff travaux. stash@{0} n'est qu'un gestionnaire.

2
alpha_989

Vous pouvez utiliser la commande Unix diff conjointement avec deux commandes Git comme ceci:

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

Bien sûr, vous pouvez remplacer la cachette @ {0} par la cachette de votre choix. Cette commande compare en fait le répertoire de travail réel (git diff) avec l'un de vos stashes.

MISE À JOUR

Vous pouvez également installer colordiff et voir un bien meilleur résultat:

Installation:

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

puis changez simplement la commande en:

colordiff <(git diff) <(git stash show -p stash@{0})
1
Petros Mitakos

Je ne sais pas ce que l'OP voulait, mais je l'utilise pour voir quel est le jeu de différences réel de la cachette:

git difftool stash@{0}^!

ou

git diff stash@{0}^!

ou

git diff stash@{0}^! > patchfile

0
Wayne Walker
diff <(git diff --color) <(git stash show -p --color)
diff <(git diff --color) <(git stash show -p --color stash@{1})

Basé sur @ petros-mitakos réponse , celui-ci à propos de l'option git --color et de la capacité de diff à afficher les couleurs de git diff.

0
o.v