git reset

Borrando Commits


Aunque no es algo que se recomiende realizar ya que estamos borrando datos de la historia del proyecto puede que en algún momento por una equivocación, por un bug o por mantener un estándar de commits tu debas o quieras utilizar el comando reset.

Existen 5 tipos de reset:
  • reset --soft
  • reset --mixed
  • reset --hard
  • reset --keep
  • reset --merge

en este post se mirara el funcionamiento de los 3 primeros y para entender el funcionamiento de estos debemos recordar los estados que posee git
como lo son el working directory, staging area y git directory

vamos a realizar un ejemplo de como modificar nuestro proyecto con estos tipos de reset.

como consejo siempre se debe guardar el SHA (Secure Hash Algorithm) de el último commit que tenemos en nuestra historia por si nos equivocamos en este procedimiento podamos retornar al estado desde el cual comenzamos con un git checkout <SHA del commit>

Soft


Realicemos un git log --oneline para poder obtener el código hash que identifica el commit desde el cual queremos mantener la historia quitar el commit



Siguiente realicemos un git reset soft desde el commit número 4 de arriba hacia abajo y un git status que nos mostrará el estado del proyecto .

Lo que se evidencia en la imagen es que tenemos cambios en nuestro proyecto que están en el staging area esperando a ser agregados a la historia del proyecto por medio de un commit.



Para finalizar verificamos la historia del proyecto la cual nos muestra cómo la historia del proyecto tiene como HEAD el commit que seleccionamos anteriormente 



En conclusión el reset -- soft nos elimina los commit superiores al seleccionado dejándonos los cambios realizados en el stage area



A continuación nos devolveremos con el comando git checkout al commit original,crearemos una rama a partir de ese commit y trabajaremos con esta rama para demostrar la utilización de los otros tipos de reset.

Mixed


Se realiza la obtención del SHA del commit el cual será el mismo del ejemplo anterior y procederemos a ejecutar el reset


Realizando un git status se puede evidenciar que todos nuestros cambios han sido enviados al working directory y están esperando a ser agregados al proyecto


Hard


Por último el reset mas peligroso ya que este elimina toda la información de los commit superiores al seleccionado es el reset --hard

Lo realizaremos con el mismo proyecto y commit para poder ver las diferencias.




En este caso no solo nos llevo al commit indicado si no que toda la información que hubiéramos modificado en estos commits ha sido completamente eliminada y no podremos acceder a ella


Recordemos que estos tipos de reset nos sirven para eliminar bloques de commit que estén errados o que ocasionen fallas en el sistema, si lo que se quiere es eliminar commit que están en el medio de la historia se debe llevar a cabo otro comando como lo es cherry pick el cual nos ayudará a seleccionar y pasar de una rama a otra un commit seleccionado

Comentarios

Entradas más populares de este blog

Revit en 3DVES

Teclas de acceso rápido en 3ds Max

PostCSS: El futuro de CSS