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.
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.
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}
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.
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 .
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})
Oui vous pouvez utiliser git stash show -p
,
cochez cette case Git diff contre une cachette pour plus d'information.
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
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.