Cuando modifica un archivo en su repositorio, el cambio se inicializa inicialmente. Para comprometerlo, debe organizarlo, es decir, agregarlo al índice, usando git add
. Cuando realiza una confirmación, los cambios que se confirman son los que se han agregado al índice.
git reset
cambia, como mínimo, a donde apunta la rama actual (HEAD
). La diferencia entre --mixed
y --soft
es si su índice también se modifica o no. Por lo tanto, si estamos en la rama master
con esta serie de confirmaciones:
- A - B - C (master)
HEAD
puntos a C
y el índice coincide con C
.
Cuando ejecute git reset --soft B
, master
(y por lo tanto HEAD
) apunta ahora a B
, pero el índice todavía tiene los cambios de C
; git status
se mostrarán como en etapas. Entonces, si ejecutamos git commit
en este punto, obtendremos una nueva confirmación con los mismos cambios que C
.
bien, así que a partir de aquí de nuevo:
- A - B - C (master)
Ahora vamos a hacer git reset --mixed B
. (Nota: --mixed
es la opción predeterminada). Una vez más, master
y HEAD
apuntan a B, pero esta vez el índice también se modifica para que coincida con B
. Si ejecutamos git commit
en este punto, nada sucederá ya que el índice coincide con HEAD
. Todavía tenemos los cambios en el directorio de trabajo, pero como no están en el índice, git status
los muestra como no procesados. Para confirmarlos, debe git add
y luego confirmar como de costumbre.
Y, por último, --hard
es lo mismo que --mixed
(que cambia su índice de HEAD
y), excepto que --hard
también modifica su directorio de trabajo. Si estamos en C
y ejecuta git reset --hard B
, los cambios agregados en C
, así como cualquier cambio no confirmado que tenga, serán eliminados, y los archivos en su copia de trabajo coincidirán con commit B
.Dado que puede perder permanentemente los cambios de esta manera, siempre debe ejecutar git status
antes de hacer un restablecimiento completo para asegurarse de que su directorio de trabajo está limpio o de que está bien con la pérdida de sus cambios no confirmados.
Y, por último, una visualización: 
Voy a editar mi respuesta sobre esa otra pregunta para tratar de aclararla un poco. – Cascabel
@mkarasek la respuesta es bastante buena, pero uno puede estar interesado en echar un vistazo a [esta pregunta] (http://stackoverflow.com/questions/2530060/can-you-explain-what-git-reset-does-in- plain-english), también. – brandizzi
Nota para usted: * En general *, 'soft: escenifique todo',' mixed: unstage everything', 'hard: ignore todo' hasta la confirmación de la que estoy restableciendo. – user1164937