origin example git git-stash

example - Captura solo cambios sin etapas en Git



git pull origin master (6)

Me gustaría hacer el siguiente flujo de trabajo:

  1. Agrega cambios al escenario.
  2. Anota todos los otros cambios que no fueron organizados.
  3. Hacer algunas cosas con las cosas en el escenario (es decir, construir, ejecutar pruebas, etc.)
  4. Aplicar 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


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

primero esconde todo, pero deja intactos los cambios por etapas

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

ahora esconde los cambios por etapas por separado también

$ git stash guardar

hacer cambios para la corrección; y prueba; cometerlos:

$ git add [--interactive] [--patch]

$ git commit -m "corregir ..."

ahora restaura los cambios escenificados previamente:

$ git stash pop

resuelva cualquier conflicto, y tenga en cuenta que si hubiera conflictos, se habrá aplicado git pero no se ha descartado esa entrada oculta.

(... Luego, realice los cambios ordenados, restaure el alijo de todos los demás cambios y continúe ...)


Con la git version 2.7.4 puedes hacer:

git stash save --patch

El git le pedirá que agregue o no sus cambios al alijo.
Y entonces solo respondes y o n

Puedes restaurar el directorio de trabajo como siempre lo haces:

git stash pop

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

git stash apply


Esto se puede hacer en 3 pasos: guardar cambios por etapas, esconder todo lo demás, restaurar el índice con 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.


Otro consejo relacionado con la pregunta:

Cuando esconde efectivamente sus cambios sin escena usando

$ git stash save --keep-index

Es posible que desee darle un mensaje al escondite, de modo que cuando haga una git stash list sea ​​más obvio lo que ha escondido antes, especialmente si sigue esa operación de escondite guardando más. Por ejemplo

$ git stash save --keep-index "cambios aún no organizados"

(aunque en realidad contiene todos los cambios como se indica en otras respuestas).

Por ejemplo, lo anterior puede ser seguido inmediatamente por:

$ git stash save "cambios por etapas para la característica X"

Tenga cuidado, sin embargo, que no puede usar

$ git stash apply "stash @ {1}" ### ✘ no hace lo que querrías

para restaurar solo los cambios sin escena.


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

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


git stash save --keep-index

Además, Re:

¿Por qué no comprometer sus cambios después de organizarlos? - Espinilla

R: Porque siempre debes verificar el código probado :) Eso significa que debes ejecutar las pruebas solo con los cambios que estás por cometer

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