Cómo comprobar si un archivo tiene cambios en 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 verificar los cambios en tu repositorio de Git. Exploraremos los comandos esenciales de Git git status y git diff para identificar los archivos modificados e inspeccionar los cambios específicos realizados en ellos.

A través de ejercicios prácticos, practicarás el uso de git status para ver qué archivos se han modificado y git diff para ver las diferencias línea por línea entre el estado actual de tus archivos y la última versión confirmada. También aprenderás cómo Git indica los archivos que no se han modificado.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/BasicOperationsGroup(["Basic Operations"]) git/BasicOperationsGroup -.-> git/add("Stage Files") git/BasicOperationsGroup -.-> git/status("Check Status") git/BasicOperationsGroup -.-> git/diff("Compare Changes") subgraph Lab Skills git/add -.-> lab-560022{{"Cómo comprobar si un archivo tiene cambios en Git"}} git/status -.-> lab-560022{{"Cómo comprobar si un archivo tiene cambios en Git"}} git/diff -.-> lab-560022{{"Cómo comprobar si un archivo tiene cambios en Git"}} end

Ejecutar git status para ver archivos modificados

En este paso, aprenderemos cómo usar git status para ver los cambios que hemos realizado en nuestro proyecto.

Primero, asegúrate de estar en el directorio de tu proyecto. Abre tu terminal y escribe:

cd ~/project/my-time-machine

Ahora, creemos un nuevo archivo. Agregaremos una línea simple al archivo message.txt:

echo "P.S. Hope you're doing well!" >> message.txt

El símbolo >> agrega el texto al archivo existente, en lugar de sobrescribirlo.

Veamos el contenido del archivo para confirmar el cambio:

cat message.txt

Deberías ver:

Hello, Future Me
P.S. Hope you're doing well!

Ahora, veamos cómo Git detecta este cambio. Ejecuta el comando git status:

git status

Deberías ver una salida similar a esta:

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")

Git nos dice que message.txt ha sido "modificado". Esto significa que Git sabe que el archivo ha cambiado desde el último commit, pero los cambios aún no se han agregado al área de preparación (staging area).

Comprender git status es crucial porque te dice el estado actual de tu directorio de trabajo y el área de preparación. Es tu herramienta principal para saber qué cambios has realizado y qué está listo para ser confirmado (commit).

Usar git diff para inspeccionar cambios

En el paso anterior, vimos que git status nos dice qué archivos se han modificado. Pero, ¿qué pasa si queremos ver exactamente qué cambios se han realizado? Ahí es donde entra git diff!

git diff muestra las diferencias entre tu directorio de trabajo y el último commit (o el área de preparación, dependiendo de cómo lo uses). Es como comparar la versión actual de tu archivo con la versión en tu último punto de guardado.

Vamos a probarlo. Asegúrate de que todavía estás en el directorio ~/project/my-time-machine y ejecuta:

git diff

Deberías ver una salida similar a esta:

diff --git a/message.txt b/message.txt
index a1b2c3d..e4f5g6h 100644
--- a/message.txt
+++ b/message.txt
@@ -1 +1,2 @@
 Hello, Future Me
+P.S. Hope you're doing well!

Desglosemos esta salida:

  • diff --git a/message.txt b/message.txt: Esta línea nos dice que Git está comparando dos versiones del archivo message.txt.
  • index a1b2c3d..e4f5g6h 100644: Esta es información técnica sobre las versiones del archivo.
  • --- a/message.txt: Esto indica la versión original del archivo (antes de tus cambios).
  • +++ b/message.txt: Esto indica la nueva versión del archivo (con tus cambios).
  • @@ -1 +1,2 @@: Esto se llama "encabezado de trozo" (hunk header). Te dice dónde se encuentran los cambios en el archivo. -1 significa que se eliminó una línea a partir de la línea 1 (en el archivo original), y +1,2 significa que hay dos líneas a partir de la línea 1 (en el nuevo archivo).
  • +P.S. Hope you're doing well!: Las líneas que comienzan con un + indican líneas que se agregaron. Si hubieras eliminado una línea, comenzaría con un -.

git diff es una herramienta increíblemente poderosa. Antes de confirmar (commit) tus cambios, siempre es una buena idea ejecutar git diff para revisar exactamente lo que estás a punto de guardar. Esto ayuda a evitar confirmar accidentalmente cambios no deseados.

Presiona q para salir de la vista de diferencias y volver a la línea de comandos.

Probar archivos sin cambios

En los pasos anteriores, vimos cómo funcionan git status y git diff cuando un archivo se ha modificado. Pero, ¿qué pasa si ejecutamos estos comandos cuando no hay cambios?

¡Vamos a averiguarlo! Asegúrate de estar en el directorio ~/project/my-time-machine.

Primero, ejecuta git status:

git status

Dado que no hemos realizado ningún cambio desde la última vez que verificamos el estado, deberías ver la misma salida que antes, lo que indica que message.txt está modificado pero no preparado (staged):

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")

Ahora, intentemos ejecutar git diff de nuevo:

git diff

Deberías ver la misma salida de diferencias (diff) que antes, que muestra la diferencia entre el archivo actual y el último commit:

diff --git a/message.txt b/message.txt
index a1b2c3d..e4f5g6h 100644
--- a/message.txt
+++ b/message.txt
@@ -1 +1,2 @@
 Hello, Future Me
+P.S. Hope you're doing well!

Esto confirma que git status y git diff muestran el estado actual de tu directorio de trabajo en relación con el último commit, independientemente de cuántas veces ejecutes los comandos sin realizar más cambios.

Ahora, preparemos (stage) los cambios que hicimos en message.txt usando git add:

git add message.txt

Ejecuta git status de nuevo:

git status

La salida cambiará para mostrar que los cambios ahora están preparados (staged):

On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   message.txt

Observa que git status ahora muestra "Changes to be committed". Esto significa que los cambios están en el área de preparación (staging area), listos para el próximo commit.

¿Qué pasa con git diff ahora? Intentémoslo:

git diff

Esta vez, git diff no mostrará salida. ¿Por qué? Porque cuando ejecutas git diff sin ningún argumento, compara tu directorio de trabajo con el área de preparación. Dado que acabamos de agregar los cambios al área de preparación, el directorio de trabajo y el área de preparación son idénticos.

Para ver la diferencia entre el área de preparación y el último commit, usarías git diff --staged. Intentémoslo:

git diff --staged

Esto mostrará la diferencia (diff) de los cambios que actualmente están en el área de preparación, que es la línea que agregamos:

diff --git a/message.txt b/message.txt
index a1b2c3d..e4f5g6h 100644
--- a/message.txt
+++ b/message.txt
@@ -1 +1,2 @@
 Hello, Future Me
+P.S. Hope you're doing well!

Comprender la diferencia entre git diff (directorio de trabajo vs. área de preparación) y git diff --staged (área de preparación vs. último commit) es un concepto clave en Git. Te ayuda a gestionar tus cambios antes de confirmarlos (commit).

Presiona q para salir de la vista de diferencias (diff) si aparece.

Resumen

En este laboratorio, aprendimos cómo verificar los cambios en un repositorio de Git. Comenzamos utilizando git status para identificar qué archivos se han modificado en el directorio de trabajo desde el último commit. Este comando proporciona un resumen del estado actual del repositorio, indicando los archivos modificados, preparados (staged) y no rastreados (untracked).

A continuación, exploramos git diff para inspeccionar los cambios específicos realizados dentro de un archivo modificado. Este comando muestra una comparación línea por línea entre la versión actual del archivo en el directorio de trabajo y la versión en el último commit, resaltando las adiciones y eliminaciones. Finalmente, confirmamos que git status informa correctamente que no hay cambios cuando no se han realizado modificaciones en los archivos del repositorio.