2011-08-27 18 views
70

Si desea mover un compromiso al área de ensayo, eso no lo compromete y mueve todos los cambios que estaban en él en el área de ensayo (efectivamente colocando la rama en el estado en el que estaría antes de la confirmación) - ¿Cómo lo haces? ¿O es algo que no puedes hacer?¿Cómo mueves un compromiso al área de preparación en git?

Lo más cerca que yo sé hacer es copiar todos los archivos que se han cambiado en el comprometerse a otro lugar, restablecer la rama a la confirmación antes de realizar la confirmación que usted está tratando de entrar en el área de ensayo, vuelva a mover todos los archivos copiados al depósito y agréguelos al área de ensayo. Funciona, pero no es exactamente una buena solución. Lo que me gustaría poder hacer es deshacer el compromiso y mover su cambio al área de preparación. Se puede hacer? Y si es así, ¿cómo?

Respuesta

132
git reset --soft HEAD^ 

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

Hay algunos esquemas prácticos en los documentos git-reset

Si está en Windows puede que tenga que utilizar este formato:

git reset --soft HEAD~1 
+15

Si esto no hace nada, intente 'git reset CABEZA --soft ~ 1' que significa lo mismo pero también funciona en Windows. –

+5

Para aclarar, tilde y carot significan cosas diferentes en las versiones de git. HEAD ~ 1 siempre sigue al primer padre de una confirmación, que podría no ser lo que quieres si se trata de una combinación de fusión que tiene múltiples padres. En cuanto al shell cmd de Windows, solo necesitas escapar de la carot con otra carot, p. "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 hacer eso si usa una GUI git en Windows. Tilde y carot se explican en http://schacon.github.io/git/git-rev-parse#_specifying_revisions – ahains

Cuestiones relacionadas