Cómo comprobar si un commit de Git modificó un archivo específico

GitGitBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio (lab), aprenderás cómo verificar si un commit específico de Git modificó un archivo en particular. Exploraremos dos métodos diferentes para lograr esto: utilizando el comando git show --name-only para obtener una visión general rápida de los archivos modificados, y aprovechando el comando más fundamental git diff-tree con opciones relevantes para identificar las modificaciones de archivos dentro de un commit.

A través de ejemplos prácticos, verás cómo estos comandos brindan información valiosa sobre los cambios introducidos por un commit, lo que te ayudará a comprender el alcance y el impacto de los commits históricos en tu repositorio de Git. También probaremos estos métodos con archivos no modificados para consolidar tu comprensión.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/BasicOperationsGroup(["Basic Operations"]) git(("Git")) -.-> git/BranchManagementGroup(["Branch Management"]) git/BasicOperationsGroup -.-> git/diff("Compare Changes") git/BranchManagementGroup -.-> git/log("Show Commits") subgraph Lab Skills git/diff -.-> lab-560068{{"Cómo comprobar si un commit de Git modificó un archivo específico"}} git/log -.-> lab-560068{{"Cómo comprobar si un commit de Git modificó un archivo específico"}} end

Ejecutar git show --name-only

En este paso, exploraremos cómo ver información sobre un commit específico utilizando el comando git show. Este comando es increíblemente útil para inspeccionar los detalles de un commit, incluyendo los cambios que introdujo.

Utilizaremos la opción --name-only con git show. Esta opción le dice a Git que solo muestre los nombres de los archivos que se modificaron en el commit, lo cual es una forma rápida de ver qué archivos se vieron afectados.

Primero, asegúrate de estar en el directorio de tu proyecto. Abre tu terminal y navega hasta el directorio my-time-machine:

cd ~/project/my-time-machine

Ahora, usemos git show con la opción --name-only para ver los archivos modificados en nuestro último commit. Recuerda, nuestro último commit fue el en el que agregamos message.txt.

git show --name-only HEAD

Aquí, HEAD es un puntero especial en Git que se refiere al último commit en tu rama (branch) actual.

Deberías ver una salida similar a esta:

commit a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9
Author: Jane Doe <[email protected]>
Date:   Mon Aug 7 10:00:00 2023 +0000

    Send a message to the future

message.txt

La salida muestra los detalles del commit (hash del commit, autor, fecha y mensaje) seguidos del nombre del archivo que se modificó en este commit, que es message.txt.

Usar git show --name-only es una forma rápida de obtener un resumen de qué archivos se modificaron en un commit específico sin ver la diferencia completa (los cambios reales dentro de los archivos). Esto es útil cuando solo quieres saber el alcance de un commit.

Usar git diff-tree para ver cambios en archivos

En este paso, exploraremos otra forma de ver los archivos modificados en un commit, utilizando el comando git diff-tree. Si bien git show --name-only es una forma común, git diff-tree es un comando más fundamental que muestra las diferencias entre dos objetos árbol (que representan el estado de tu proyecto en un commit específico).

Utilizaremos git diff-tree con las opciones -r y --name-only. La opción -r hace que el comando sea recursivo, lo que significa que buscará en subdirectorios. La opción --name-only, similar a git show, solo listará los nombres de los archivos que son diferentes.

Primero, asegúrate de estar en el directorio my-time-machine:

cd ~/project/my-time-machine

Ahora, usemos git diff-tree para ver los archivos modificados en nuestro último commit. Necesitamos el hash del commit (el identificador único) del commit. Puedes obtenerlo de la salida de git log o git show. Para nuestro primer commit, también puedes usar HEAD.

git diff-tree -r --name-only HEAD

Deberías ver una salida similar a esta:

message.txt

Esta salida es más simple que git show --name-only porque git diff-tree se centra principalmente en mostrar las diferencias entre árboles, no los detalles completos del commit. Cuando se usa con --name-only, solo lista los archivos que se agregaron, eliminaron o modificaron entre el padre del commit y el commit en sí. Dado que nuestro primer commit no tenía padre, muestra los archivos agregados en ese commit.

Comprender git diff-tree es útil porque es un comando de nivel inferior que otros comandos de Git a menudo usan internamente. Te ayuda a entender cómo Git rastrea los cambios entre diferentes versiones de tu proyecto.

Probar con archivos no modificados

En los pasos anteriores, vimos cómo git show --name-only y git diff-tree -r --name-only muestran los archivos que se modificaron en un commit específico. Ahora, veamos qué sucede cuando ejecutamos estos comandos en un commit donde no se modificó ningún archivo (esto no es el caso de nuestro único commit, pero podemos simular la idea).

Dado que nuestro repositorio actual solo tiene un commit donde se agregó un archivo, ejecutar estos comandos en ese commit siempre mostrará message.txt. Para ilustrar el concepto de mostrar solo los archivos modificados, imaginemos que tuviéramos un commit que no cambiara ningún archivo (esto suele suceder con los commits de fusión (merge commits) o los commits que solo cambian metadatos, pero para este ejercicio, nos centraremos en la salida cuando no se listan archivos).

Si fueras a ejecutar git show --name-only o git diff-tree -r --name-only en un commit que no modificó ningún archivo, la salida de la parte de los nombres de los archivos estaría vacía.

Volvamos a ejecutar los comandos que aprendimos para reforzar el concepto. Asegúrate de estar en el directorio my-time-machine:

cd ~/project/my-time-machine

Vuelve a ejecutar git show --name-only:

git show --name-only HEAD

La salida será similar a:

commit a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9
Author: Jane Doe <[email protected]>
Date:   Mon Aug 7 10:00:00 2023 +0000

    Send a message to the future

message.txt

Ahora vuelve a ejecutar git diff-tree -r --name-only:

git diff-tree -r --name-only HEAD

La salida será:

message.txt

Ambos comandos muestran correctamente message.txt porque ese archivo se introdujo en este commit. La idea principal aquí es que estos comandos están diseñados para listar solo los archivos que se modificaron (agregados, eliminados o modificados) en el commit especificado. Si un commit no cambia ningún archivo, estos comandos (específicamente la parte de la lista de archivos) no mostrarán nada.

Este comportamiento es importante para entender el alcance de los cambios introducidos por un commit. Te ayuda a identificar rápidamente qué partes de tu proyecto se vieron afectadas por un cambio en particular.

Resumen

En este laboratorio, aprendimos cómo verificar qué archivos se modificaron en un commit específico de Git. Exploramos dos métodos principales: el uso de git show --name-only y git diff-tree con las opciones -r y --name-only.

Primero, usamos git show --name-only HEAD para ver rápidamente los nombres de los archivos modificados en el último commit, demostrando su utilidad para obtener una visión general concisa. Luego, presentamos git diff-tree, un comando más fundamental, y lo usamos con las opciones -r y --name-only para obtener un resultado similar, destacando su mecanismo subyacente para comparar objetos árbol (tree objects). Finalmente, probamos estos comandos con commits que no modificaron un archivo específico para confirmar su comportamiento y comprensión.