Para nadie es un secreto que el dominio del control de versiones es fundamental para ser un buen desarrollador, aquí es donde entra Git con sus innumerables comandos. En esta ocasión te mostraré como puedes eliminar commits a través del comando git reset y sus diferentes variantes.
Para usar git reset
es fundamental tener en cuenta lo siguiente:
Debemos haber inicializado previamente nuestro proyecto con el comando
git init
.Debemos obtener la referencia del commit previo al que queremos eliminar.
Si queremos eliminar varios commits, debemos obtener la referencia del commit en el cual queremos posicionarnos y los posteriores a este serán los afectados.
¿Cómo obtengo la referencia de un commit?
Para buscar la referencia del commit debemos ir a la lista de commits con el comando
git log
.Una vez usado este comando, se te mostrará una lista con los commits que has hecho, un mensaje que describe a cada uno y su respectivo identificador único, referencia de commit o también llamado hash.
Ejemplo
Previamente, cree una carpeta llamada ejemplo-git donde inicialice Git con el comando git init
, realice cuatro commits y utilice el comando git log
para ver la lista completa de commits.
Uso de git reset
y sus variantes
- git reset --mixed hash_del_commit
Esta variante nos permite eliminar commits y enviar sus cambios a la zona de trabajo o en inglés llamado working directory, este es su comportamiento por defecto así que no es necesario emplear la bandera --mixed
, pero es importante saberlo.
Cabe resaltar que si algún archivo que generaste en el commit que acabaste de eliminar no tenía cambios previos en otros commits, este dejara de tener seguimiento por Git, para restaurarlo solo debes enviarlo a la zona de preparación o en inglés llamado staging area.
Ejemplo
Continuaremos con el proyecto ejemplo-git donde ya había generado cuatro commits, en este caso procederé a eliminar el último commit donde había agregado un archivo README.md.
- Visualizamos la lista de commits con el comando
git log
y obtenemos el hash del commit previo al último, ya que ahí es donde queremos posicionar el proyecto, que elimine el commit posterior a este y lleve los cambios a la zona de trabajo.
- Ejecutamos el comando
git reset --mixed
junto con el hash del commit para completar la eliminación, verificamos que el archivo esté en la zona de trabajo con el comandogit status
y que ya no exista el commit en la lista con el comandogit log
.
- git reset --soft hash_del_commit
Esta variante nos permite eliminar commits y enviar sus cambios a la zona de preparación o en inglés llamado staging area. Normalmente, este comando lo podemos usar cuando nos faltó algún cambio que agregar en el último commit.
Ejemplo
Continuamos en el proyecto ejemplo-git y lo que haremos será eliminar de nuevo el último commit, que en este caso es el commit donde agregue un archivo index.js.
- Visualizamos de nuevo la lista de commits con el comando
git log
y obtenemos el hash del commit previo.
- Ejecutamos el comando
git reset --soft
junto con el hash del commit para completar la eliminación, comprobamos que el archivo esté en la zona de preparación con el comandogit status
y que ya no exista el commit en la lista con el comandogit log
.
- git reset --hard hash_del_commit
Esta variante nos permite eliminar commits y sus cambios totalmente sin dejar rastro alguno.
Al emplear esta variante es fundamental verificar que no hayas hecho cambios en ningún otro archivo, ya que estos cambios también serian borrados, no importa si están en la zona de trabajo o de preparación, si ya tienen un seguimiento por Git serán afectados.
Para saber que archivos no tienen seguimiento por Git, podemos utilizar el comando git status
y estos aparecerán en el apartado de untracked files, este es el estado de todos los archivos que creamos y nunca han estado en la zona de preparación o que en algún momento los bajamos de allí.
Ejemplo
Siguiendo con el proyecto ejemplo-git, ahora solo nos quedan dos commits y vamos a eliminar el último, que en este caso sería el commit donde agregue el archivo styles.css.
- Visualizamos de nuevo la lista de commits con el comando
git log
y obtenemos el hash del commit previo.
- Ejecutamos el comando
git reset --hard
junto con el hash del commit para completar la eliminación, usamos el comandogit status
para verificar que no esté el archivo styles.css, también podremos ver que el index.js fue borrado y que el archivo README.md permaneció intacto por las razones anteriormente mencionadas. Para finalizar revisamos que ya no exista el commit en la lista con el comandogit log
.
IMPORTANTE
Recuerden que pueden eliminar más de un commit y decidir que hacer con los cambios de esos commits, a través de las variantes mostradas que te ofrece
git reset
, en este caso siempre elimine el último para llevar un orden y que se entendiera.Si solo has creado un commit en tu proyecto
git reset
no funcionara como esperas, ya que este se basa en tener por lo menos dos commits. De tal modo que se necesita una referencia a un commit previo para poder devolver el proyecto a un estado anterior.git reset es considerado por algunos como una mala práctica, así que utilízalo cuando sea realmente necesario, es muy probable que lo necesites para salir de algún apuro.
Si te gusto puedes compartirlo, además te invito a conectar conmigo en mi LinkedIn, seguiré generando este tipo de artículos sobre desarrollo frontend.
Top comments (0)