Historial de cambios en git

Examinar y revisar el historial de commits


Ahora que sabemos como añadir y eliminar archivos de la lista de archivos vigilados por git y hacer cambios a través de commits, algo interesante sería poder mirar ese historial de cambios y aprender a gestionarlos.

Veamos una serie de tareas útiles respecto a esto.

Ver historial de cambios con git log

Mediante el comando git log podemos ver el historial de los últimos cambios o commits realizados en el proyecto. Observa que aparece desde el más reciente al más antiguo, y aparece paginado para que podamos movernos arriba y abajo, y salir pulsando q:

commit 5d1c91b618f4e551a97660ca3b9c785dc5f64ad0 (HEAD -> main)
Author: ManzDev <[email protected]>
Date:   Sun Jul 21 17:24:09 2024 +0100

    Añadimos cambios en la estructura, funcionalidad JS y el README

commit 3178f03e7746991e0a22382ac244d1855a41ba1c
Author: ManzDev <[email protected]>
Date:   Sun Jul 21 15:20:26 2024 +0100

    Añadimos la estructura y el estilo de la web.

A parte de mostrar el nombre de usuario y correo y la fecha del commit, así como el mensaje del commit, observa que aparece un id largo, que lo identifica de forma única. Más adelante veremos que podemos escribir git log --graph para mostrarlo en formato de gráfica con las ramas, pero ahora no tiene mucho sentido verlo así.

También debes saber que escribiendo git log --oneline tenemos una versión simplificada del historial de commits:

$ git log --oneline
5d1c91b (HEAD -> main) Añadimos cambios en la estructura, funcionalidad JS y el README
3178f03 Añadimos la estructura y el estilo de la web.

Ver los cambios de un commit

Mediante el comando git show podemos ver los cambios realizados en un commit concreto. Por ejemplo, si queremos ver los cambios del último commit podemos hacerlo con el comando git show 5d1c91b (los primeros 7 carácteres del id del commit) o colocar el puntero al HEAD adecuado:

$ git show HEAD
$ git show HEAD~1
$ git show HEAD~2

El primero de ellos, muestra el último commit, el segundo muestra el anterior, y así. Este comando mostrará la información del commit concreto que vemos en el git log, pero además identificará todos los archivos que han cambiado y mostrará sus diferencias mediante un comando que explicaremos a continuación.

Diferencias con git diff

El comando git diff muestra las diferencias entre dos commits, o entre el último commit y el commit específico indicado. Además, se puede indicar el archivo específico, si solo queremos ver los cambios en ese archivo:

$ git diff HEAD HEAD~1 index.html
diff --git a/index.html b/index.html
index 89cccb4..243c9c5 100644
--- a/index.html
+++ b/index.html
@@ -8,7 +8,7 @@
   </head>
   <body>

-     <h1>Hello!!</h1>
+     <h1>Hello!</h1>

   </body>
 </html>

Observa que lo que hace es indicarte las diferencias entre los archivos, pero de una forma bastante técnica y difícil de leer.

Diferencias con git icdiff

Mi recomendación es realizar los siguientes pasos para utilizar icdiff, una herramienta que muestra de forma más visual los cambios. Para ello, vamos a instalarla y configurarla primero:

$ sudo apt install icdiff
$ git difftool --extcmd icdiff
$ git config --global icdiff.options '--highlight --line-numbers'

Ahora, cuando queramos ver los cambios, en lugar de git diff, escribiremos git icdiff:

$ git icdiff HEAD HEAD~1 index.html

Ahora nos mostrará los cambios, pero de forma visual y lado a lado, lo que sin duda será mucho más sencillo de leer y entender.

En el siguiente artículo exploraremos las diferentes formas de deshacer commits, algo que necesitaremos en muchos casos, y no es tan sencillo como parece, ya que depende de nuestras necesidades del momento.

Es posible moverte entre commits temporalmente para, por ejemplo, revisar detalles. Para ello, podemos utilizar el comando git checkout indicando los primeros 7 carácteres del commit en cuestión:

$ git checkout 3178f03

Con esto, nos encontraremos temporalmente en el commit indicado y podemos revisar nuestros archivos con los cambios que tenían en ese entonces. Una vez hemos terminado, podemos volver al último commit de nuevo, utilizando el siguiente comando:

$ git checkout -

¿Quién soy yo?

Soy Manz, vivo en Tenerife (España) y soy streamer partner en Twitch y profesor. Me apasiona el universo de la programación web, el diseño y desarrollo web y la tecnología en general. Aunque soy full-stack, mi pasión es el front-end, la terminal y crear cosas divertidas y locas.

Puedes encontrar más sobre mi en Manz.dev