Introducción
En este laboratorio, aprenderás cómo realizar un seguimiento efectivo del historial de un archivo en Git, incluso después de que se haya renombrado. Exploraremos el poderoso comando git log --follow para seguir el historial de un archivo a través de los cambios de nombre.
También aprenderás cómo usar git diff --name-status para examinar el estado de los archivos entre confirmaciones (commits), y finalmente, probaremos estas técnicas en archivos que no se han renombrado para entender la diferencia en la salida.
Ejecutar git log --follow -- Archivo
En este paso, exploraremos cómo realizar un seguimiento del historial de un archivo específico, incluso si se ha renombrado. Aquí es donde el comando git log --follow resulta útil.
Primero, asegúrate de estar en el directorio de tu proyecto.
cd ~/project/my-time-machine
Ahora, creemos un nuevo archivo y agreguemos algo de contenido.
echo "This is the original content." > original_file.txt
Agreguemos y confirmemos (commit) este archivo.
git add original_file.txt
git commit -m "Add original file"
Deberías ver una salida similar a esta:
[master 1a2b3c4] Add original file
1 file changed, 1 insertion(+)
create mode 100644 original_file.txt
Ahora, renombrémos el archivo.
git mv original_file.txt renamed_file.txt
Verifiquemos el estado para ver el cambio.
git status
Deberías ver algo como esto:
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
renamed: original_file.txt -> renamed_file.txt
Untracked files:
(use "git add <file>..." to include in what will be committed)
message.txt
Confirmemos (commit) el renombrado.
git commit -m "Rename original file"
Deberías ver una salida similar a esta:
[master 5d6e7f8] Rename original file
1 file changed, 0 insertions(+), 0 deletions(-)
rename original_file.txt -> renamed_file.txt (100%)
Ahora, usemos git log para ver el historial del archivo renombrado.
git log renamed_file.txt
Esto solo mostrará la confirmación (commit) donde se renombró el archivo. Para ver el historial antes del renombrado, necesitamos usar la opción --follow.
git log --follow renamed_file.txt
Este comando mostrará el historial del archivo, siguiendo sus cambios de nombre. Deberías ver tanto la confirmación (commit) "Rename original file" como la confirmación (commit) "Add original file".
El comando git log --follow es esencial cuando necesitas entender el historial completo de un archivo que se ha movido o renombrado dentro de tu repositorio. Te ayuda a rastrear la evolución del archivo a través de diferentes confirmaciones (commits), independientemente de su nombre actual.
Utilizar git diff --name-status
En este paso, aprenderemos cómo usar git diff --name-status para ver un resumen de los cambios entre confirmaciones (commits), centrándonos específicamente en el estado y los nombres de los archivos que han cambiado.
Primero, asegúrate de estar en el directorio correcto:
cd ~/project/my-time-machine
Hagamos otro cambio en nuestro archivo renamed_file.txt.
echo "Adding a new line." >> renamed_file.txt
Ahora, veamos el estado.
git status
Deberías ver que renamed_file.txt ha sido modificado.
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: renamed_file.txt
Untracked files:
(use "git add <file>..." to include in what will be committed)
message.txt
no changes added to commit (use "git add" and/or "git commit -a")
Agreguemos el cambio al área de preparación (staging area).
git add renamed_file.txt
Ahora, usemos git diff --name-status para ver los cambios entre la última confirmación (commit) y los cambios preparados (staged).
git diff --name-status --cached
La opción --cached le dice a git diff que compare los cambios preparados (el índice) con la última confirmación (HEAD).
Deberías ver una salida similar a esta:
M renamed_file.txt
La salida M renamed_file.txt indica que el archivo renamed_file.txt ha sido Modificado.
Ahora, confirmemos (commit) este cambio.
git commit -m "Add new line to renamed file"
Deberías ver una salida similar a esta:
[master 9h0i1j2] Add new line to renamed file
1 file changed, 1 insertion(+)
El comando git diff --name-status es muy útil para obtener una visión general rápida de qué tipo de cambios (agregados, modificados, eliminados, renombrados, copiados) han ocurrido entre diferentes puntos de tu historial de Git, sin mostrar el contenido completo de los cambios. Esto es especialmente útil cuando se revisan cambios antes de confirmar (commit) o cuando se comparan ramas (branches).
Probar archivos no renombrados
En este paso, observaremos cómo se comporta git log --follow con archivos que no se han renombrado. Esto ayudará a consolidar tu comprensión de cuándo es necesario usar la opción --follow.
Primero, asegúrate de estar en el directorio correcto:
cd ~/project/my-time-machine
Ya tenemos renamed_file.txt y message.txt en nuestro repositorio. Agreguemos algo de contenido a message.txt.
echo "This is a message." >> message.txt
Verifiquemos el estado.
git status
Deberías ver que message.txt ha sido modificado y que renamed_file.txt está actualizado.
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: message.txt
no changes added to commit (use "git add" and/or "git commit -a")
Agreguemos y confirmemos (commit) el cambio en message.txt.
git add message.txt
git commit -m "Add content to message file"
Deberías ver una salida similar a esta:
[master 3k4l5m6] Add content to message file
1 file changed, 1 insertion(+)
Ahora, usemos git log en message.txt.
git log message.txt
Esto mostrará el historial de message.txt. Deberías ver la confirmación (commit) "Add content to message file" y la confirmación inicial donde se creó message.txt (desde el primer laboratorio).
Ahora, probemos git log --follow en message.txt.
git log --follow message.txt
Notarás que la salida es la misma que con git log message.txt. Esto se debe a que message.txt no se ha renombrado ni movido. La opción --follow está específicamente diseñada para realizar un seguimiento del historial de un archivo a través de cambios de nombre. Para archivos que no se han renombrado, git log es suficiente.
Este paso demuestra que mientras git log --follow es poderoso para realizar un seguimiento de archivos renombrados, para archivos que mantienen su nombre, el comando estándar git log proporciona el historial completo. Comprender esta distinción te ayuda a elegir el comando adecuado para la tarea.
Resumen
En este laboratorio, aprendimos cómo realizar un seguimiento del historial de un archivo en Git, incluso después de que se haya renombrado. Comenzamos creando, agregando y confirmando (commit) un archivo, luego lo renombramos usando git mv y confirmamos el cambio de nombre. Luego demostramos que un simple git log en el nuevo nombre de archivo solo muestra el historial a partir del momento en que se realizó el cambio de nombre.
La principal lección fue el uso del comando git log --follow <filename>. Esta poderosa opción permite a Git rastrear el historial de un archivo a través de los cambios de nombre, proporcionando una visión completa de su evolución desde su creación hasta su estado actual. Esto es crucial para entender el contexto completo de las modificaciones de un archivo dentro del historial de un proyecto.



