¿Existe un git stash
comando que oculta sus cambios, pero también los mantiene en el directorio de trabajo? Entonces, básicamente, ¿ git stash; git stash apply
en un solo paso?
Para lo que vale, otra forma de hacer esto es organizar los cambios que desea mantener y luego guardar todo usando --keep-index
:
$ git add modified-file.txt
$ git stash push --keep-index
Los comandos anteriores guardarán todo, pero dejarán los archivos almacenados en su directorio de trabajo.
Desde el oficial de Linux Kernel Git paragit stash
o desde git-scm :
Si
--keep-index
se utiliza la opción, todos los cambios ya agregados al índice se dejan intactos.
git stash
y luego git stash apply
( git stash && git stash apply
) guardará los archivos y los aplicará inmediatamente después. Entonces, después de todo, tendrá sus cambios en el alijo y en el directorio de trabajo.
Puede crear un alias si lo desea en una sola pieza. Solo pon algo como esto para ~/.gitconfig
:
[alias]
sta = "!git stash && git stash apply"
El inconveniente de este enfoque es que todos los archivos se almacenan y recrean. Esto significa que las marcas de tiempo en los archivos en cuestión se cambiarán. (Causando que Emacs se queje cuando intento guardar el archivo si lo abrí antes de hacerlo git sta
, y puede causar reconstrucciones innecesarias si está usando make
o amigos).
git stash; git stash apply
y git stash && git stash apply
?
&&
ejecuta el segundo comando solo si primero devolvió el código de estado cero .
git config --global alias.sta "!git stash && git stash apply"
debería hacerlo.
git stash save
con un argumento y luego hacerlo git stash apply
?
Una pequeña mejora en la respuesta que en la práctica puede usar.
$ git add modified-file.txt
(OR $ git add . ---- for all modified file)
$ git stash save --keep-index "Your Comment"
Hay un truco que puede ayudarte, no esconder cosas, sino 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)
Entonces, ahora que tiene un alijo etiquetado de confirmación a su disposición, no es posible hacerlo de git stash pop
todos modos, pero puede hacer cosas como crear parches o restablecer archivos, etc. a partir de ahí, sus archivos de directorio de trabajo también quedan intactos.
Puede usar git stash create
para crear una confirmación de ocultación y luego guardarla en la ocultación usando git stash store
:
git stash store $(git stash create) -m "Stash commit message"
Esto se puede guardar en un alias git para que sea más conveniente:
git config --global alias.stash-keep '!git stash store $(git stash create)'
git stash-keep -m "Stash commit message"
Tenga en cuenta que esto no hace todo lo que git stash push
hace. Por ejemplo, no agrega el nombre de la rama a la confirmación, por ejemplo, " stash@{0}: On myBranch: Stash commit message
".
man git-stash
dice que -m <message>
tiene que venir antes del commit hash. Excepto que algo cambia en el nuevo git.
git stash && git stash apply
. Notarás que las respuestas a esa pregunta son bastante diferentes a las mías.