22 Restore y reset
Otra forma de deshacer cambios es con restore y reset. Usualmente se requiere para deshacer:
Cambios antes de mandarlos al área de preparación.
Cambios que ya se mandaron al área de preparación.
Commits
Supongamos que hicimos un cambio en el archivo de prueba y lo guardamos y después decidimos que ya no queremos ese cambio, entonces usamos la opción:
git restore prueba.txtEsto nos regresará a la versión del archivo del último commit.
Esto no se puede deshacer, una vez echo esto no hay forma de recuperar los cambios que se habían realizado.
Ahora, supongamos que hicimos un cambio y lo mandamos al área de preparación, entonces para sacarlo de esa área usamos:
git restore --staged prueba.txtTambién se pueden restaurar todos los archivos de un proyecto con:
git restore .Para restaurar a un commit anterior usamos el identificador del commit, por ejemplo:
git restore --source d3a9d6d prueba.txtSi ahora revisamos el estado del proyecto veremos que si hay cambios.
Agreguemos una línea al archivo prueba.txt y añadamos el cambio al área de preparación. Usen git checkout para ver si podemos revertir el cambio. Veamos que nos dice el estado git status. Si usamos git checkout -- prueba.txt ya no veremos errores pero tampoco se restaurará el archivo.
Para hacerlo debemos usar reset:
git reset HEAD prueba.txtY si usamos ahora:
git statusNos indica que ya podemos realizar la modificación con checkout:
git checkout -- prueba.txt
git statusCon reset tenemos tres posibles situaciones.
- Situación 1:
reset --soft HEAD~1: si realizamos un cambio en nuestro archivo y lo añadimos al área de preparación, al realizar elreset softal commitHEAD~1lo que estamos haciendo es como regresar a un commit anterior pero sin perder los cambios que ya tenemos en el área de preparación, entonces lo que va a resultar es que nuestro historial va a cambiar de un commit anterior hasta el cambio que tenemos ahora. Congit statusvemos que no cambio nuestra área de preparación y después congit logpodemos ver el cambio en el historial de commits.
- Situación 2:
reset --mixed HEAD~1: si realizamos un cambio en nuestro archivo y lo añadimos al área de preparación, al realizar elreset mixedal commitHEAD~1lo que estamos haciendo es como regresar nuestra área de preparación a como estaba antes de ese commit, no perdemos el cambio realizado en el archivo pero nuestro historial cambiará, pasará del commit anterior hasta el próximo commit que realicemos. Congit statusvemos que nuestra área de preparación si cambio y congit logvemos que nuestro último commit desapareció.
- Situación 3:
reset --hard HEAD~1: si realizamos un cambio en nuestro archivo y lo añadimos al área de preparación, al realizar elreset hardal commitHEAD~1lo que estamos haciendo es como regresar a un commit anterior pero perdiendo los cambios que ya tenemos en el área de preparación y en nuestro archivo actual, entonces lo que va a resultar es que estaríamos regresando hasta el commit anterior todo nuestro historial y a partir de ahí comenzarían nuestros cambios.




