Git stash semble faire beaucoup de ce que je veux, sauf qu'il est un peu difficile à scripter, car si vous n'avez pas de changements, il git stash; git stash pop
fera quelque chose de différent que si vous avez des changements dans votre référentiel.
Il semble que git stash create
c'est la réponse à ce problème, et tout fonctionne, sauf une chose… Je ne peux pas me débarrasser de la cachette créée. Existe-t-il un moyen de se débarrasser de la cachette?
Pour être clair à 100% sur ce que je fais:
Créez la cachette:
~/tmp/a(master) $ git stash create
60629375d0eb12348f9d31933dd348ad0f038435
~/tmp/a(master) $ git st
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: b
#
~/tmp/a(master) $ git reset --hard
HEAD is now at 555d572 log message
Utilisez la cachette:
~/tmp/a(master) $ git apply 60629375d0eb12348f9d31933dd348ad0f038435
fatal: can't open patch '60629375d0eb12348f9d31933dd348ad0f038435': No such file or directory
~/tmp/a(master) $ git stash apply 60629375d0eb12348f9d31933dd348ad0f038435
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: b
#
Supprimez la cachette: (sauf que ce dernier bit ne fonctionne pas)
~/tmp/a(master) $ git stash drop !$
git stash drop 60629375d0eb12348f9d31933dd348ad0f038435
'60629375d0eb12348f9d31933dd348ad0f038435' is not a stash reference
git apply
exécution dans la deuxième zone de code au moment de la rédaction de ce document n'a pas appliqué de correctif — le message d'erreur dans la sortie vous l'a dit. Donc, en fait, vous avez essayé de créer une cachette (qui n'a pas fonctionné, voir les commentaires ci-dessous) appliquer une cachette qui n'a pas été créée puis supprimer une cachette qui n'a pas été créée. C'est pourquoi rien de ce que vous avez fait n'a fonctionné.git stash apply
a fonctionné. Lesgit apply
tentatives de lecture d'un fichier de correctif local, qui n'existe pas. Pour être honnête, cela ne devrait probablement pas être là, et cela n'aurait jamais pu fonctionner. Je suis vaguement tenté de le retirer de la question, mais étant donné qu'il a aidé tant de personnes dans sa forme actuelle, je vais la laisser telle quelle.Réponses:
Pour supprimer un stash normal créé avec
git stash
, vous voulezgit stash drop
ougit stash drop stash@{n}
. Voir ci-dessous pour plus de détails.Vous n'avez pas besoin de supprimer une cachette créée avec
git stash create
. De la documentation:Étant donné que rien ne fait référence à la validation de la sauvegarde, il sera éventuellement récupéré.
Un stash créé avec
git stash
ougit stash save
est enregistré dansrefs/stash
et peut être supprimé avecgit stash drop
. Comme avec tous les objets Git, le contenu réel de la cachette n'est pas supprimé de votre ordinateur jusqu'à ce qu'ilgc
élague ces objets après leur expiration (la valeur par défaut est 2 semaines plus tard).Les anciens masques sont enregistrés dans le
refs/stash
reflog (essayezcat .git/logs/refs/stash
) et peuvent être supprimés avecgit stash drop stash@{n}
, oùn
est le nombre indiqué pargit stash list
.la source
git stash
- je ne sais pas si cela correspond réellement àgit stash create
quelque chose d'autre. Git est certainement quelque chose que j'apprends encore (si ce n'était pas le cas, je negit stash create
. Plutôt que d'enregistrer dans un fichier de patch horodaté, vous pouvez simplement laisser git reflog l'enregistrer pour vous dans une référence personnalisée (par exemplerefs/backup
). Je voudrais essayer quelque chose comme 1)git stash create
, 2) comparer l'arbre de la nouvelle cachette avecrefs/backup^{tree}
, 3) si l'arbre est différentgit update-ref --create-reflog refs/backup <stash-sha>
,. Finalement, les anciennes sauvegardes de sauvegarde seront élaguées automatiquement.git stash drop
ne prend aucun paramètre - qui supprime la cachette supérieure - ou une référence de cachette qui ressemble à:stash@{n}
quin
nomme la cachette à supprimer. Vous ne pouvez pas transmettre un ID de validation àgit stash drop
.La suppression d'une cachette changera la
stash@{n}
désignations de toutes les cachettes plus loin dans la pile.Je ne sais pas pourquoi vous pensez que vous devez supprimer une stash, car si vous utilisez
stash create
une entrée de stash qui n'est pas créée pour votre "stash", il n'y a donc rien à supprimer.la source
Si vous êtes sûr à 100% que vous n'avez qu'une seule cachette ou si vous souhaitez supprimer toutes les cachettes (assurez-
git stash list
vous que 107% est sûr), vous pouvez faire:..et oubliez-les (il supprime toutes les réserves).
Remarque: Ajout de cette réponse pour ceux qui se sont retrouvés ici à la recherche d'un moyen de les effacer tous (comme moi).
la source
git stash drop
, car cela ne laisse tomber qu'une seule cachette, et vous n'avez pas à vous soucier de perdre plus que prévu.git stash drop
comme d'habitude. Je ne suis pas sûr de ce que j'ai fait différemment. Quoi qu'il en soit, agit stash clear
travaillé pour moi. Je ne savais pas que ça existait. +1Depuis git doc: http://git-scm.com/docs/git-stash
Supprimez un seul état caché de la liste de cachettes. Si non est donné, il supprime le dernier. c'est à dire
stash@{0}
, doit être une référence de journal de dissimulation valide de la forme stash @ {}.exemple:
Cela supprimerait l'entrée de cachette 5. Pour voir toute la liste des cachettes:
la source
git stash show stash@{REPLACE_IT_WITH_STASH_INDEX}
avant de l'exécutergit stash drop
. Croyez-moi, cela vous évitera bien des ennuis :)Vous devriez utiliser
et pas
car cela crée une cachette (qui est un objet de validation normal) et renvoie son nom d'objet, sans le stocker n'importe où dans l'espace de noms ref. Par conséquent, ne sera pas accessible avec stash apply.
Utilisation
git stash save "some comment"
est utilisé lorsque vous avez des modifications non mises en scène que vous souhaitez répliquer / déplacer sur une autre brancheUtilisation
git stash apply stash@{0}
(en supposant que votre index de sauvegarde enregistré est 0) lorsque vous souhaitez que vos modifications enregistrées (stockées) se reflètent sur votre branche actuellevous pouvez toujours utiliser
git stash list
pour vérifier tous vos index cachéset utilisez
git stash drop stash@{0}
(en supposant que votre index de stash enregistré est 0 et que vous souhaitez le supprimer) pour supprimer un stash particulier.la source
git stash
défaut estgit stash save
git stash create
est destiné à être utilisé par des scripts. C'est le cas d'utilisation d'OP. Donc, recommandergit stash save
peut être utile pour des utilisations "normales", mais pas pour le cas d'utilisation d'OP. OP voudra peut-être jeter un œil aux documents : il y a plus de commandes liées aux scripts, par exemplegit stash store
git stash save "message"
de nos jours devrait liregit stash push -m "message"
. Comparergit commit -m "message"
Ça marche aussi
comme
la source
Le document est ici (en chinois) veuillez cliquer.
vous pouvez utiliser
la source
git stash create
est différent degit stash save
, en particulier, le formulaire de création n'apparaît pas dans la liste et ne peut pas être supprimé, d'où la question.la source