Stocker les modifications tout en conservant les modifications dans le répertoire de travail de Git
146
Existe-t-il une git stashcommande qui bloque vos modifications, mais les conserve également dans le répertoire de travail? Donc, fondamentalement, un git stash; git stash applyen une seule étape?
@MariuszPawelski Non, pas vraiment. Cette question est plus précise que la mienne. La réponse à ma question était simplement «non». Merci pour le lien, cela peut être utile à certaines personnes, voire à moi-même plus tard.
Michael Dorst
Pour être clair, ma question est différente car je n'ai aucune exigence que les fichiers restent intacts. Je cherchais simplement des alternatives git stash && git stash apply. Vous remarquerez que les réponses à cette question sont assez différentes des miennes.
Michael Dorst
ah, c'est vrai, votre question est un peu moins précise. Mais j'ai posé cette question parce que ses réponses répondent également à votre exigence. Et de cette façon, cette question apparaîtra comme "Liée" dans la barre latérale, elle pourrait donc être utile à quelqu'un.
Mariusz Pawelski
Réponses:
157
Pour ce que cela vaut, une autre façon de le faire est de mettre en scène les modifications que vous souhaitez conserver, puis de tout cacher en utilisant --keep-index:
c'est de loin l'explication la plus simple de --keep-index que j'ai vue. Je n'ai pas compris tout à fait le sens de la façon dont il était formulé sur les documents.
40détectives
52
git stashpuis git stash apply( git stash && git stash apply) cachera les fichiers et appliquera la sauvegarde immédiatement après. Donc, après tout, vous aurez vos modifications dans la réserve et dans le répertoire de travail.
Vous pouvez créer un alias si vous le souhaitez en un seul morceau. Mettez simplement quelque chose comme ça à ~/.gitconfig:
[alias]
sta = "!git stash && git stash apply"
L'inconvénient de cette approche est que tous les fichiers sont stockés et recréés. Cela signifie que les horodatages des fichiers en question seront modifiés. (Faire en sorte qu'Emacs se plaint lorsque j'essaie de sauvegarder le fichier s'il l'a ouvert avant de le faire git sta, et peut entraîner des reconstructions inutiles si vous utilisez makeou des amis.)
Comment puis-je modifier cet alias pour l'utiliser git stash saveavec un argument, puis le faire git stash apply?
spinningarrow
1
@JaySidri, bang signifie qu'il s'agit en fait d'une commande externe, pas d'un argument git lui-même. Selon la documentation : "Comme vous pouvez le voir, Git remplace simplement la nouvelle commande par celui pour lequel vous l'aliasez. Cependant, vous souhaitez peut-être exécuter une commande externe, plutôt qu'une sous-commande Git. Dans ce cas, vous démarrez la commande avec un ! personnage."
madhead
10
Une petite amélioration de la réponse qui, dans la pratique, peut être utile.
$ git add modified-file.txt
(OR $ git add . ---- for all modified file)
$ git stash save --keep-index "Your Comment"
NOTE: ne fonctionne pas sans "git add" (par exemple pour les fichiers modifiés mais non ajoutés aux commit)
alex_1948511
4
Il y a une astuce qui peut vous aider, non pas pour cacher mais FWIW:
git add -A
git commit -m "this is what's called stashing" (create new stash commit)
git tag stash (mark the commit with 'stash' tag)
git reset HEAD~ (Now go back to where you've left with your working dir intact)
Et donc maintenant que vous avez une cachette étiquetée de commit à votre disposition, il n'est pas possible d'en faire de git stash poptoute façon, mais vous pouvez faire des choses comme créer un correctif ou réinitialiser des fichiers, etc. à partir de là, vos fichiers de répertoire de travail sont également laissés intacts BTW.
Notez que cela ne fait pas tout ce qui git stash pushfait. Par exemple, il n'ajoute pas le nom de la branche au commit, par exemple " stash@{0}: On myBranch: Stash commit message".
J'aime celui-ci!! Une correction cependant: man git-stashdit que le -m <message>doit venir avant le hachage de validation. Sauf que quelque chose a changé dans le dernier git.
git stash && git stash apply
. Vous remarquerez que les réponses à cette question sont assez différentes des miennes.Réponses:
Pour ce que cela vaut, une autre façon de le faire est de mettre en scène les modifications que vous souhaitez conserver, puis de tout cacher en utilisant
--keep-index
:Les commandes ci-dessus cacheront tout, mais laisseront les fichiers mis en scène dans votre répertoire de travail.
De la documentation officielle du noyau Linux Git pour
git stash
ou depuis git-scm :la source
git stash
puisgit stash apply
(git stash && git stash apply
) cachera les fichiers et appliquera la sauvegarde immédiatement après. Donc, après tout, vous aurez vos modifications dans la réserve et dans le répertoire de travail.Vous pouvez créer un alias si vous le souhaitez en un seul morceau. Mettez simplement quelque chose comme ça à
~/.gitconfig
:L'inconvénient de cette approche est que tous les fichiers sont stockés et recréés. Cela signifie que les horodatages des fichiers en question seront modifiés. (Faire en sorte qu'Emacs se plaint lorsque j'essaie de sauvegarder le fichier s'il l'a ouvert avant de le faire
git sta
, et peut entraîner des reconstructions inutiles si vous utilisezmake
ou des amis.)la source
git stash; git stash apply
etgit stash && git stash apply
?&&
deuxième commande ne s'exécute que si le premier code de statut renvoyé est zéro .git config --global alias.sta "!git stash && git stash apply"
devrait le faire.git stash save
avec un argument, puis le fairegit stash apply
?Une petite amélioration de la réponse qui, dans la pratique, peut être utile.
la source
Il y a une astuce qui peut vous aider, non pas pour cacher mais FWIW:
Et donc maintenant que vous avez une cachette étiquetée de commit à votre disposition, il n'est pas possible d'en faire de
git stash pop
toute façon, mais vous pouvez faire des choses comme créer un correctif ou réinitialiser des fichiers, etc. à partir de là, vos fichiers de répertoire de travail sont également laissés intacts BTW.la source
Vous pouvez utiliser
git stash create
pour créer un commit stash, puis l'enregistrer dans le stash en utilisantgit stash store
:Cela peut être enregistré dans un alias git pour le rendre plus pratique:
Notez que cela ne fait pas tout ce qui
git stash push
fait. Par exemple, il n'ajoute pas le nom de la branche au commit, par exemple "stash@{0}: On myBranch: Stash commit message
".la source
man git-stash
dit que le-m <message>
doit venir avant le hachage de validation. Sauf que quelque chose a changé dans le dernier git.