Cómo comprobar si un archivo se ha renombrado en el historial de Git

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, 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.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/BasicOperationsGroup(["Basic Operations"]) git(("Git")) -.-> git/BranchManagementGroup(["Branch Management"]) git/BasicOperationsGroup -.-> git/add("Stage Files") git/BasicOperationsGroup -.-> git/status("Check Status") git/BasicOperationsGroup -.-> git/commit("Create Commit") git/BasicOperationsGroup -.-> git/diff("Compare Changes") git/BranchManagementGroup -.-> git/log("Show Commits") subgraph Lab Skills git/add -.-> lab-560030{{"Cómo comprobar si un archivo se ha renombrado en el historial de Git"}} git/status -.-> lab-560030{{"Cómo comprobar si un archivo se ha renombrado en el historial de Git"}} git/commit -.-> lab-560030{{"Cómo comprobar si un archivo se ha renombrado en el historial de Git"}} git/diff -.-> lab-560030{{"Cómo comprobar si un archivo se ha renombrado en el historial de Git"}} git/log -.-> lab-560030{{"Cómo comprobar si un archivo se ha renombrado en el historial de Git"}} end

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.

Usar 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.