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.
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.
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}
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 .
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.
Vous pouvez utiliser git stash show -l
. Il montre ce que vous voulez sans stash ou commit supplémentaire.
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.
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:
puis changez simplement la commande en:
colordiff <(git diff) <(git stash show -p stash@{0})
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