Git stash uncached: ¿cómo guardar todos los cambios no escalonados?


Supongamos que se realizan dos conjuntos de cambios en un proyecto versionado por git. Un conjunto es escenificado y el otro no.

Me gustaría volver a comprobar los cambios realizados ejecutando mi proyecto en este estado (antes de la confirmación). ¿Cuál es una forma sencilla de guardar todos los cambios no escalonados y dejar solo escalonados? Así que necesito que los cambios no escalonados desaparezcan de mi proyecto, pero que se almacenen en algún lugar para seguir trabajando.

Esto suena muy parecido al comando git stash. Pero git stash pondría ambos sin escenario y cambios escenificados lejos de mi proyecto. Y no puedo encontrar algo como git stash uncached.

Author: Ken Williams, 2013-11-17

4 answers

Actualización:
A pesar de que esta es la respuesta seleccionada, muchos han señalado que la respuesta a continuación es la correcta, recomiendo comprobarla.

Respuesta antigua :
Si se utiliza la opción --keep-index, todos los cambios ya añadidos al índice se dejan intactos:

git stash --keep-index

De la documentación de git-stash:

Probando confirmaciones parciales

Puedes usar git stash save --keep-index cuando quieras hacer dos o más confirmaciones fuera de los cambios en el árbol de trabajo, y desea probar cada cambio antes de confirmar:

# ... hack hack hack ...
$ git add --patch foo            # add just first part to the index
$ git stash save --keep-index    # save all other changes to the stash
$ edit/build/test first part
$ git commit -m 'First part'     # commit fully tested change
$ git stash pop                  # prepare to work on all other changes
# ... repeat above five steps until one commit remains ...
$ edit/build/test remaining parts
$ git commit foo -m 'Remaining parts'

Pero, si solo desea verificar visualmente los cambios por etapas, puede probar difftool:

git difftool --cached
 64
Author: Mohammad AbuShady,
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-05-29 20:48:44

La respuesta aceptada también guarda los cambios preparados, como algunos han señalado, y no guarda los archivos sin seguimiento. Aquí hay una manera de hacerlo sin obtener sus cambios por etapas en el alijo, mientras que también la eliminación y el almacenamiento de archivos sin seguimiento.

La idea es hacer una confirmación temporal de sus cambios en etapas, luego guardar los cambios no en etapas, luego anular la confirmación temporal:

# temp commit of your staged changes:
$ git commit --message "WIP"

# stage your previously unstaged files before stashing (so you get untracked files):
$ git add .

$ git stash

# now un-commit your WIP commit:
$ git reset --soft HEAD^

En este punto, tendrá un alijo de sus cambios no escalonados y solo tendrá sus cambios escalonados presente en su copia de trabajo.

 39
Author: stephen.hanson,
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-05-29 20:33:13

Encontré que la respuesta marcada no funcionaba para mí, ya que necesitaba algo que realmente guardara solo mis cambios no escalonados. La respuesta marcada, git stash --keep-index, guarda tanto los cambios en fase como los no en fase. La parte --keep-index simplemente deja el índice intacto en la copia de trabajo también. Eso funciona para OP, pero solo porque hizo una pregunta ligeramente diferente de la que realmente quería la respuesta.

La única manera verdadera que he encontrado para almacenar los cambios no escalonados es no usar el alijo en todos:

git diff > unstaged.diff
git apply -R unstaged.diff

git checkout -- . también funcionará en lugar de apply -R.

trabajo Trabajo...

git apply unstaged.diff
rm unstaged.diff
 13
Author: Binary Phile,
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-07-29 14:01:30

Git: Stash cambios no escalonados

Esto guardará todas las modificaciones que no hayas añadido:

git stash -k

Tenga en cuenta que los archivos recién creados (y no agregados) permanecerán en su directorio de trabajo a menos que también use el interruptor -u.

git stash -k -u 

Además, tu directorio de trabajo debe estar limpio (es decir, todos los cambios deben agregarse) cuando git stash pop más tarde en.

Http://makandracards.com/makandra/853-git-stash-unstaged-changes

 2
Author: Cory Danielson,
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
2014-12-13 19:33:26