¿Cómo mueves un commit al área de preparación en git?

143

Si desea mover una confirmación al área de preparación, es decir, no confirmarla y mover todos los cambios que estaban en ella al área de preparación (efectivamente colocando la rama en el estado en el que habría estado antes de la confirmación) ¿Cómo lo haces? ¿O es algo que no puedes hacer?

Lo más cercano que sé hacer es copiar todos los archivos que se modificaron en el commit a otro lugar, restablecer la rama al commit antes del commit que intentas mover al área de preparación, mover todo el copiaron los archivos nuevamente en el repositorio y luego los agregaron al área de preparación. Funciona, pero no es exactamente una buena solución. Lo que me gustaría poder hacer es deshacer la confirmación y mover su cambio al área de preparación. Se puede hacer? Y si es así, ¿cómo?

Jonathan M Davis
fuente

Respuestas:

267
git reset --soft HEAD^

Esto restablecerá su índice a HEAD^(la confirmación anterior) pero dejará sus cambios en el área de preparación.

Hay algunos diagramas útiles en los git-resetdocumentos.

Si está en Windows, es posible que deba usar este formato:

git reset --soft HEAD~1
Abizern
fuente
18
Si esto no hace nada, intente lo git reset --soft HEAD~1que significa lo mismo pero también funciona en Windows.
Roman Starkov
9
Para aclarar, tilde y carot significan cosas diferentes en las versiones de git. HEAD ~ 1 siempre sigue al primer padre de un commit, que podría no ser lo que desea si es un commit de fusión que tiene múltiples padres. Con respecto al shell de cmd de Windows, solo necesita escapar de la carot con otra carot, por ejemplo, "git reset --soft HEAD ^^" para volver a "HEAD ^". Esto es puramente un artefacto del shell cmd de Windows, por lo que no debería tener que hacerlo si usa una GUI git en Windows. Tilde y Carot se explican en schacon.github.io/git/git-rev-parse#_specifying_revisions
ahains
Agregué un enlace para los "diagramas prácticos". ¿Podrías comprobar rápidamente si lleva a la sección que querías decir? Gracias
Neuron
5

Una manera simple

  1. Archivos comprometidos en el área de ensayo

    git reset --soft HEAD^1

  2. Puesta en escena en UnStage : (use "git reset HEAD ..." para unstage)

    git reset HEAD git commands.txt or git reset HEAD *ds.txt

aquí, * -> todos los archivos terminan con ds.txt para desestabilizar.

Consulte la imagen a continuación para mayor claridad:

ingrese la descripción de la imagen aquí

Shiva Nandam Sirmarigari
fuente