Guarde los cambios mientras mantiene los cambios en el directorio de trabajo en Git


¿Hay un comando git stash que guarde sus cambios, pero también los mantenga en el directorio de trabajo? Así que básicamente un git stash; git stash apply en un paso?

Author: SQB, 2013-07-24

4 answers

Por si sirve de algo, 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 save --keep-index

Los comandos anteriores esconderán todo, incluido modified-file.txt, pero también dejarán ese archivo preparado y en su directorio de trabajo.

De la documentación oficial de Git del Kernel de Linux para git stash:

Si se utiliza la opción --keep-index, todos los cambios ya añadidos al índice quedan intactos.

 85
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-25 03:31:10

git stash y luego git stash apply (git stash && git stash apply) almacenará los archivos y aplicará el almacenamiento inmediatamente después de él. Así que después de todo, tendrá sus cambios en el alijo y en el dir de trabajo.

Puede crear un alias si lo desea en una sola pieza. Solo pon algo como esto a ~/.gitconfig:

[alias]
    sta = "!git stash && git stash apply"

El inconveniente de este enfoque es que todos los archivos se almacenan y se 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 abro antes hice el git sta, y puede causar reconstrucciones innecesarias si estás usando make o amigos.)

 33
Author: madhead,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-29 15:31:35

Una pequeña mejora en la respuesta que en la práctica puede probablemente utilizar.

$ git add modified-file.txt  
(OR $ git add .    ---- for all modified file)
$ git stash save --keep-index "Your Comment"
 6
Author: Premchandra Singh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-01 09:43:52

Hay un truco que puede ayudarte, no stash' cosa pero 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)

Así que ahora tienes un stash etiquetado de confirmación a tu disposición, no es posible hacer un git stash pop de todos modos, pero puedes hacer cosas como crear parches o restablecer archivos, etc. a partir de ahí, sus archivos dir de trabajo también se dejan intactos por cierto.

 2
Author: KenIchi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-22 00:42:09