Supongamos que se realizan dos conjuntos de cambios en un proyecto versionado por git. Un set está organizado y el otro no.
Me gustaría volver a verificar los cambios por etapas ejecutando mi proyecto en este estado (antes de confirmar). ¿Cuál es una forma sencilla de guardar todos los cambios sin etapas y dejarlos solo por etapas? Así que necesito que los cambios sin etapas desaparezcan de mi proyecto, pero que se almacenen en algún lugar para seguir trabajando.
Esto suena muy parecido a un git stash
comando. Pero git stash
alejaría de mi proyecto tanto los cambios no escenificados como los escenificados. Y no puedo encontrar algo como git stash uncached
.
-k
opción) o incómodas de usar.Respuestas:
Actualización 2:
no estoy seguro de por qué la gente se queja de esta respuesta, parece que funciona perfectamente conmigo, para los archivos no extraídos, puede agregar la
-u
banderaEl comando completo se convierte en
git stash --keep-index -u
Y aquí hay un fragmento de la
git-stash
ayuda.Y este es un gif de cómo se ve:
Actualizar:
Aunque esta es la respuesta seleccionada, muchos han señalado que la [respuesta a continuación] (https://stackoverflow.com/a/34681302/292408) es la correcta, recomiendo revisarla.Probé mi respuesta nuevamente hoy (31/1/2020) contra la versión de git
2.24.0
, y todavía creo que es correcta, agregué una pequeña nota arriba sobre los archivos sin seguimiento. Si cree que no funciona, mencione también su versión de git.Respuesta anterior :
si
--keep-index
se usa la opción, todos los cambios ya agregados al índice se dejan intactos:De la documentación de
git-stash
:Pero, si solo desea verificar visualmente los cambios por etapas, puede probar
difftool
:fuente
git stash [-p|--patch]
cuál se siente como un escondite interactivo. Desdeman git stash
"Con --patch, puede seleccionar de forma interactiva trozos de la diferencia entre HEAD y el árbol de trabajo para guardarlos".add -p
,checkout -p
yreset -p
nunca lo intentéstash -p
, gracias por el consejo: DLa respuesta aceptada también esconde cambios por etapas, como algunos han señalado. Esta es una manera de hacerlo sin tener que guardar los cambios por etapas.
La idea es hacer una confirmación temporal de sus cambios por etapas, luego esconder los cambios no preparados y luego anular la confirmación de la confirmación temporal:
En este punto, tendrá un alijo de sus cambios sin etapas y solo tendrá sus cambios en etapas presentes en su copia de trabajo.
fuente
--keep-index
opción en la respuesta aceptada actual aún guarda lo que está en el índice, simplemente también lo mantiene en el índice. Entonces se duplica y se produce la risa.git add .
posible que desee mejorar el paso,git add --all
ya que también debería capturar los archivos en un directorio sobre el directorio de trabajo actual.Descubrí que la respuesta marcada no funcionaba para mí, ya que necesitaba algo que realmente escondiera solo mis cambios no escenificados. La respuesta marcada
git stash --keep-index
,, esconde los cambios escenificados y no escenificados. La--keep-index
parte simplemente deja el índice intacto también en la copia de trabajo. Eso funciona para OP, pero solo porque hizo una pregunta ligeramente diferente a la que realmente quería la respuesta.La única forma verdadera que he encontrado de esconder cambios sin etapas es no usar el alijo en absoluto:
git checkout -- .
también funcionará en lugar deapply -R
.Trabajo Trabajo trabajo...
fuente
git version 2.6.1.windows.1
,git stash -k
funcionó como se describe.Git: Stash cambios sin etapas
Esto guardará todas las modificaciones que no agregaste:
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
-u
interruptor.Además, su directorio de trabajo debe estar limpio (es decir, es necesario agregar todos los cambios) cuando git stash pop más adelante.
http://makandracards.com/makandra/853-git-stash-unstaged-changes
fuente
git stash --keep-index
. Los archivos por etapas se incluyen en el alijo.