
git reset y git revert
Capítulo 8: ¿Cómo usar git reset y git revert?
Seguimos con más temas de Git viendo un poco sobre el funcionamiento de git reset y git revert, para que puedas ver la diferencia entre estos.
Como utilizar git reset
Con git reset
puedes eliminar commits que no quieras. Ten en cuenta que esto te será útil si todavía no has subido los commits a un repositorio remoto, por ejemplo, en GitHub.

Supongamos que tenemos un proyecto con la rama master y cinco commits. Quiero volver al commit número dos y borrar absolutamente todo, hasta el historial de versiones de los commits posteriores. Esto lo puedo hacer gracias a git reset
.
Como ver el log (historial) de commits realizados
Antes de continuar con git reset
, necesitas conocer un comando nuevo. El comando git log
.
Para ver el historial de commits en una rama, lo haremos con este comando.
git log
Esto genera un log en la consola con los commits de la rama. Además, muestra el hash del commit (la combinación de números y letras), que sirve de identificador para llamar a los commit. También muestra el autor. Recuerda que al principio de este curso te mostré como especificarle un nombre de usuario y un correo electrónico. Finalmente, también muestra la fecha y hora exacta del commit. Además de el mensaje que le hemos escrito al hacerlo.

Hay una forma mucho más cómoda y práctica de ver el log. Lo podemos hacer con una opción del comando que muestre un resumen, siempre que no necesitemos más que su identificador reducido y su mensaje:
git log --oneline
5a577be (HEAD -> master) Commit 5.
bf82b56 Commit 4.
62ca6c3 Commit 3.
264fa9e Commit 2.
ce6b156 Commit 1.
Ahora, supón que quieres descartar de esta rama los commits 5, 4 y 3. Quieres volver a como estaba el proyecto en el commit 2 y borrar todo lo posterior. Lo puedes hacer así:
git reset 264fa9e

Primero dice que hay cambios sin guardar en el área de staging después de hacer el reset, me lo indica en estas líneas:
Unstaged changes after reset:
M texto.txt
La letra M
es una abreviación de "Modified" (modificado).
Lo que ha ocurrido es que hemos hecho un reset al propio commit 2 y a todo lo que viene delante.
En la imagen del resultado, puedes ver que al hacer log después del reset, han desaparecido los commit 3, 4 y 5. Ya no se puede recuperar ese trabajo. Voló .
Como utilizar git revert

Supongamos que tienes de nuevo los cinco commits. Partiremos de esa base.
1105103 (HEAD -> master) Commit 5.
b4d3e06 Commit 4.
af6ed8d Commit 3.
caacdc8 Commit 2.
f21b17f Commit 1.
Con git revert
puedes ir a un commit anterior y crear uno nuevo a partir de este, de modo que no pierdas commits en el historial de versiones.
Si ahora quiero trabajar a partir del commit 4 pero sin modificar el historial, es decir conservar el commit 5, lo puedo hacer con git revert
. Esto creará un nuevo commit con el trabajo en el commit 4 sin borrar el commit 5 y en un nuevo commit.
git revert 1105103
Esto nos revierte (revert es revertir en español) el trabajo del commit sin eliminarlo y lo guarda como un commit nuevo.

Esto lo puedes ver con el log, en el que aparece el commit nº 6 que es una copia del 4 sin borrar nada, para que puedas continuar el trabajo desde ahí sin alteraciones.

¿Cómo acceder a un commit en concreto?
Algo que has visto hasta ahora, era como acceder a las ramas y ver el último trabajo sobre ellas, el último commit. También puedes acceder a un commit en concreto de una rama con su hash.
git checkout hash_commit
Dónde hash_commit
, lo debes reemplazar por el hash que identifica al commit. Ten en cuenta, que el HEAD
debe estar con la rama activa al commit que representa.
Comentarios
Si te quedan dudas sobre el temario, sobre html, o cualquier otra cosa relacionada o simplemente quieres agradecer, aquí tienes tu sitio para dejar tu granito de arena. Gracias por tus comentarios y por darle vida a este sitio web.