Git stash no guardado: ¿cómo save todos los cambios sin grabar?

Supongamos que dos sets de cambios se hacen en un proyecto versionado por git. Un set está organizado y el otro no.

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

Esto suena muy parecido al command git stash . Pero git stash pondría los cambios sin escenario y en etapas lejos de mi proyecto. Y no puedo encontrar algo como git stash uncached .

Si se usa la opción --keep-index , todos los cambios ya agregados al índice se dejan intactos:

 git stash --keep-index 

De la documentation de git-stash :

Prueba de confirmaciones parciales

Puedes usar git stash save --keep-index cuando quieras hacer dos o más commits de los cambios en el tree de trabajo, y quieres probar cada cambio antes de cometer:

 # ... 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 

La respuesta aceptada también oculta los cambios orderados, como algunos señalaron, y no oculta los files sin seguimiento. Esta es una forma de hacerlo sin get los cambios orderados en el alijo, y al mismo time eliminar y almacenar los files sin seguimiento.

La idea es hacer una confirmación temporal de tus cambios por etapas, luego esconder los cambios no registrados y luego anular la confirmación de la confirmación temporal:

 # temp commit of your staged changes: $ git commit -m "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 registrados y solo tendrá sus cambios por etapas presentes en su copy de trabajo.

Descubrí que la respuesta marcada no me funcionaba porque necesitaba algo que realmente ocultaba solo mis cambios no registrados. La respuesta marcada, git stash --keep-index , git stash --keep-index etapas y los cambios sin escena. La parte --keep-index simplemente deja el índice intacto en la copy 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 forma verdadera que he encontrado para esconder cambios no supervisados ​​es no usar el alijo en absoluto:

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

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

Trabajo Trabajo trabajo…

 git apply unstaged.diff rm unstaged.diff 

Git: cambios sin escenario Stash

Esto ocultará todas las modificaciones que no hayas agregado.

 git stash -k 

Tenga en count que los files recién creados (y no agregados) permanecerán en su directory de trabajo a less que también use el -u .

 git stash -k -u 

Además, su directory de trabajo debe estar limpio (es decir, todos los cambios deben ser agregados) cuando git stash pop más tarde.

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