Como volver atrás con git

Cuando estamos trabajando con git, nos suele pasar (a mi por lo menos) que hago un git commit de ficheros que no tendría que meter en el commit, como ficheros de configuración o simplemente test que hacemos para nosotros.

En este post intentaré explicaros con ejemplos, como funciona este comando. El cual nos sacará de muchos quebraderos de cabeza

Ver commits en Git

Este comando tiene la siguiente estructura :

git log (opciones) (rango de revisión) --(directorio)
  • opciones, las opciones como --oneline.
  • rango de revisión, ponemos el hash o el rango de ellos.
  • --directorio , el fichero si queremos ver el log de un fichero en concreto.

Si queremos acceder a los tres últimos commits :

git log -3
------------
commit b102f751ad71ba9eb48d396b17ffeb049ac3e4c9 (HEAD -> master)
Author: Lololo
Date:   Mon Mar 30 21:33:05 2020 +0200

    ADD Dolor

commit bb79bddbed385cfd3705582ef2756120d70f78b2
Author: Lololo
Date:   Mon Mar 30 21:32:54 2020 +0200

    ADD Amet

commit 2f956b15ed9c2a3e3845fbfc8809cb68456fa561
Author: Lololo
Date:   Mon Mar 30 21:31:44 2020 +0200

    Commit inicial
------------

Pero lo mejor es usar --oneline lo que nos mostrará de forma comoda el contenido.

git log --oneline -3
b102f75 (HEAD -> master) ADD Dolor
bb79bdd ADD Amet
2f956b1 Commit inicial

Nos aportará un hash abreviado de los últimos tres commits. Cambiando el valor después del - nos irá dando tantos commits hacia atrás como queramos.

// Va dos commits hacia atrás
git log --oneline -2
// Va tres commits hacia atrás
git log --oneline -3
// Va N commits hacia atrás, siendo N un valor entero de 0 a donde queremos
git log --oneline -N

Usando git reset

Breve introduccion

Este comando tiene la siguiente estructura

git reset (modo) (commit)
  • modo este parámetro es opcional, lo usaremos en los siguientes puntos.
  • commit al commit que queramos ir, como vimos aquí pondremos el hash.

Este comando nos moverá entre los distintos commits que hemos hecho a lo largo del proyecto. Que cabe destacar que sería la mejor práctica, hacer varios commits según vamos avanzando, por si la pifiamos en algún momento para poder volver a un punto en el que no perdamos mucho trabajo. Este comando tiene varias formas con las que trabajar como explicaré a continuación.

Reset con valor por defecto.

De base se aplica la forma mixed, este modo lo que hace es borrar los commits posteriores pero mantiene los ficheros modificados, sin meterlos en el commit.

Hard, pasando borrando todo los commits posteriores.

Este commando borrará todos los commits posteriores a donde situemos el HEAD, pero también borrará todos los cambios de los ficheros es un cambio muy agresivo, poco recomendado para solucionarlo tendremos que usar el historial del IDE

git reset --hard (commit)
  • commit este parametro lo usaremos para saltar al commit que queremos.

El comando sería :

git reset --hard bb79bdd
HEAD está ahora en bb79bdd ADD Amet

Lo que hace es saltar al commit bb79bdd.

(b102f75) --> (bb79bdd) --- (2f956b1)

Quedaría así :

(bb79bdd) --- (2f956b1)
bb79bdd (HEAD -> master) ADD Amet
2f956b1 Commit inicial

Soft , volver sin borrar nada

Esto nos ayudará a volver atrás, pero no borraremos ni los commits, ni los cambios en los ficheros.

git reset --soft (commit)

El comando quedaría como estamos viendo, de la siguiente forma :

git log --soft  2f956b1 

Esto nos quedaría :

(bb79bdd) --> (2f956b1)
2f956b1 (HEAD -> master) Commit inicial

Podríamos volver con git reset --soft bb79bdd , sin ningún problema al commit siguiente, sin tener que descartar ningun trabajo realizado..

05-04-2020