Cómo ver cambios en un commit específico de Git

GitBeginner
Practicar Ahora

Introducción

Git es un potente sistema de control de versiones que ayuda a los desarrolladores a rastrear cambios, colaborar y gestionar su código base de manera eficaz. Una habilidad fundamental en Git es la capacidad de inspeccionar el historial del proyecto para ver qué cambios se realizaron, cuándo y por quién. En este laboratorio, aprenderá a ver los cambios introducidos en un commit específico de Git. Esto es esencial para comprender la evolución de su proyecto, revisar código y solucionar problemas.

Explorando el Historial de Commits

Antes de poder ver los cambios en un commit específico, primero necesitas encontrar ese commit. El comando git log se utiliza para mostrar el historial de commits de un repositorio. Para este laboratorio, se ha creado un repositorio Git de ejemplo para ti en ~/project/git-demo.

Primero, navega al directorio del proyecto. Todos los comandos en este laboratorio deben ejecutarse desde dentro de este directorio.

cd ~/project/git-demo

Ahora, usa el comando git log con la opción --oneline para ver una vista compacta del historial de commits. Esto te mostrará una lista de todos los commits, cada uno con su hash de commit único y mensaje de commit.

git log --oneline

Deberías ver una salida similar a esta. Los hashes de commit en tu pantalla serán diferentes, pero los mensajes serán los mismos.

a1b2c3d (HEAD -> master) Add application file
e4f5g6h Update README with project description
i7j8k9l Initial commit: Add README.md

Cada línea representa un commit. La cadena de 7 caracteres al principio de cada línea (por ejemplo, a1b2c3d) es una versión abreviada del hash del commit, que identifica de forma única el commit. Utilizarás estos hashes en los siguientes pasos para inspeccionar commits específicos.

Viendo los Cambios de un Commit Específico

Ahora que tienes una lista de commits, puedes usar el comando git show para ver los detalles y cambios de un commit específico. Este comando muestra los metadatos del commit (autor, fecha, mensaje) y el "diff", que resalta las líneas exactas que se agregaron o eliminaron.

Vamos a inspeccionar el segundo commit, que tiene el mensaje "Update README with project description". Busca su hash de commit en la salida del paso anterior.

Copia el hash y úsalo con git show. Reemplaza <commit-hash> con el hash real de tu terminal.

git show <commit-hash>

Por ejemplo, si el hash para ese commit fuera e4f5g6h, ejecutarías:

git show e4f5g6h

La salida se verá algo así:

commit e4f5g6h1a2b3c4d5e6f7g8h9i0j1k2l3m4n5o6p7
Author: LabEx <labex@example.com>
Date:   ...

    Update README with project description

diff --git a/README.md b/README.md
index ...
--- a/README.md
+++ b/README.md
@@ -1 +1,3 @@
 ## My Project
+
+This is a simple project to demonstrate Git.

Analicemos la salida:

  • Metadatos del Commit: Las primeras líneas muestran el hash completo del commit, el autor, la fecha y el mensaje del commit.
  • Sección Diff: La parte que comienza con diff --git es el "diff".
    • --- a/README.md y +++ b/README.md indican las versiones "antes" y "después" del archivo.
    • Las líneas prefijadas con + son líneas que se agregaron en este commit.
    • Las líneas prefijadas con - (no presentes en este ejemplo) son líneas que se eliminaron.

Viendo Cambios de un Archivo Específico en un Commit

A veces, un commit puede modificar varios archivos, pero solo te interesan los cambios en un archivo específico. Puedes indicarle a git show que solo muestre los cambios de un archivo en particular agregando la ruta del archivo al final del comando.

Veamos el commit más reciente, que tiene el mensaje "Add application file". Este commit agregó el archivo app.py.

Primero, obtén el hash del commit más reciente de la salida de tu git log --oneline. Luego, ejecuta git show con ese hash, seguido de -- y el nombre del archivo app.py.

git show app.py < latest-commit-hash > --

Por ejemplo, si el hash del commit más reciente es a1b2c3d, el comando sería:

git show a1b2c3d -- app.py

La salida ahora se limitará a los cambios realizados en app.py en ese commit.

commit a1b2c3d...
Author: LabEx <labex@example.com>
Date:   ...

    Add application file

diff --git a/app.py b/app.py
new file mode 100644
index 0000000..d95f32b
--- /dev/null
+++ b/app.py
@@ -0,0 +1 @@
+print("Hello, Git!")

Observa que la salida es mucho más corta y solo contiene el diff para app.py. La línea new file mode 100644 indica que este archivo fue creado en este commit.

Comparando Dos Commits

Mientras que git show es para ver los cambios dentro de un solo commit, puedes usar git diff para ver los cambios acumulados entre dos commits cualesquiera. Esto es útil para ver todo lo que ha cambiado entre dos puntos en el tiempo, como entre dos lanzamientos.

Comparemos el commit inicial y el commit más reciente para ver todos los cambios realizados en el proyecto hasta ahora. Necesitarás los hashes de commit para el primer commit ("Initial commit: Add README.md") y el último commit ("Add application file").

Usa el comando git diff con los dos hashes.

git diff <first-commit-hash> <last-commit-hash>

Por ejemplo, si el hash de tu primer commit es i7j8k9l y el último es a1b2c3d:

git diff i7j8k9l a1b2c3d

La salida mostrará un diff combinado de todos los cambios que ocurrieron entre estos dos commits.

diff --git a/README.md b/README.md
index ...
--- a/README.md
+++ b/README.md
@@ -1 +1,3 @@
 ## My Project
+
+This is a simple project to demonstrate Git.
diff --git a/app.py b/app.py
new file mode 100644
index 0000000..d95f32b
--- /dev/null
+++ b/app.py
@@ -0,0 +1 @@
+print("Hello, Git!")

Esta salida muestra tanto la actualización de README.md como la creación de app.py, dándote una imagen completa de la evolución del proyecto entre estos dos puntos.

Resumen

En este laboratorio, has aprendido a navegar por el historial de un repositorio de Git e inspeccionar cambios. Practicaste el uso de git log para listar commits, git show para ver los detalles y cambios dentro de un solo commit (tanto para el commit completo como para un archivo específico), y git diff para comparar las diferencias entre dos commits. Estos comandos son fundamentales para comprender los cambios en el código, depurar y colaborar eficazmente en cualquier proyecto basado en Git.