Guardar solo cambios no escalonados en Git


Me gustaría hacer el siguiente flujo de trabajo:

  1. Añade cambios al escenario.
  2. Guarda todos los demás cambios que no fueron preparados.
  3. Hacer algunas cosas con las cosas en stage (es decir, construir, ejecutar pruebas, etc.)
  4. Aplica el alijo.

¿Hay alguna manera de hacer el paso 2?

Ejemplo

 echo "123" > foo
 git add foo # Assumes this is a git directory
 echo "456" >> foo
 git stash
 cat foo # Should yield 123
 144
Author: Unapiedra, 2011-10-04

6 answers

git stash save tiene una opción --keep-index que hace exactamente lo que necesita.

Entonces, ejecuta git stash save --keep-index.

 214
Author: vhallac,
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
2011-10-04 16:10:50
git stash save --keep-index

También, Re:

¿Por qué no confirmar sus cambios después de organizarlos? - Shin

R: Debido a que siempre debe verificar el código probado:) Eso significa que necesita ejecutar las pruebas con solo los cambios que está a punto de confirmar

Todo esto aparte del hecho de que, por supuesto, como programador experimentado, tienes el impulso innato de probar y revisar solo esos cambios {solo en parte bromeando

 27
Author: sehe,
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
2011-10-04 16:13:25

Esto se puede hacer en 3 pasos: guardar los cambios por etapas, guardar todo lo demás, restaurar el índice con los cambios por etapas. Que es básicamente:

git commit -m "~~~ saved index ~~~"
git stash save -u
git reset --soft HEAD~1

Esto hará exactamente lo que quieras.

 19
Author: alesguzik,
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-25 10:13:12

Con git version 2.7.4 usted puede hacer:

git stash save --patch

El git le pedirá que agregue o no sus cambios en el alijo.
Y luego solo respondes y o n

Puede restaurar el directorio de trabajo como siempre lo hace:

git stash pop

O, si desea mantener los cambios guardados en el alijo:

git stash apply
 8
Author: Eugen Konkov,
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
2017-06-29 18:36:20

Extendiendo las respuestas anteriores, a veces tengo un conjunto complejo de cambios preparados, pero deseo confirmar primero un cambio separado. Por ejemplo, es posible que haya detectado un error o código incorrecto que me gustaría corregir antes de mis cambios por etapas. Una posible ruta a seguir es esta:

Primero guarda todo, pero deja los cambios por etapas intactos

Save git stash save keep keep-index [include include-untracked]

Ahora también guarda los cambios por etapas por separado

Save git stash save

Hacer cambios para fix; y probar; confirmarlos:

Git git add [interactive interactive] [patch patch]

Git git commit-m"fix..."

Ahora restaura los cambios previamente preparados:

Pop git stash pop

Resuelve cualquier conflicto, y ten en cuenta que si hubiera conflictos, git habrá aplicado pero no ha eliminado esa entrada del alijo superior.

(... A continuación, confirmar los cambios por etapas, y restaurar el alijo de todos los demás cambios, y continuar ...)

 5
Author: Rhubbarb,
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-01-21 13:10:39

Otro consejo, relacionado con la pregunta:

Cuando se esconden efectivamente los cambios no escalonados usando

Save git stash save keep keep-index

Es posible que desee darle un mensaje al alijo, para que cuando haga un git stash list sea más obvio lo que ha guardado antes, especialmente si sigue esa operación de alijo con más guardadas. Por ejemplo

Save git stash save keep keep-index"cambios aún no realizados"

(aunque en realidad lo hace contener todos los cambios como se indica en otras respuestas).

Por ejemplo, lo anterior podría ser seguido inmediatamente por:

Save git stash save "staged changes for feature X"

Tenga cuidado, sin embargo, que no puede luego usar

Apply git stash apply "stash@{1}" # # # {no hace exactamente lo que podrías querer

Para restaurar solo los cambios no escalonados.

 2
Author: Rhubbarb,
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-01-21 16:02:15