Cómo comprobar si un repositorio de Git tiene cambios no confirmados

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 si hay cambios no confirmados en un repositorio de Git. Exploraremos el comando esencial git status para ver el estado general de tu directorio de trabajo y los cambios preparados (staged).

Además, descubrirás cómo usar el comando git diff para examinar las modificaciones específicas realizadas en tus archivos, lo que te permitirá ver exactamente qué ha cambiado antes de confirmar (commit). Finalmente, tocaremos brevemente la combinación de verificaciones para cambios preparados y no preparados.


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-560091{{"Cómo comprobar si un repositorio de Git tiene cambios no confirmados"}} git/status -.-> lab-560091{{"Cómo comprobar si un repositorio de Git tiene cambios no confirmados"}} git/diff -.-> lab-560091{{"Cómo comprobar si un repositorio de Git tiene cambios no confirmados"}} end

Ejecutar git status para ver los cambios

En este paso, aprenderemos cómo usar el comando git status para ver el estado actual de nuestro repositorio de Git. Este comando es tu mejor amigo cuando trabajas con Git, ya que te dice exactamente lo que está sucediendo.

Primero, asegúrate de estar en el directorio my-time-machine. Puedes hacer esto escribiendo:

cd ~/project/my-time-machine

Ahora, ejecutemos el comando git status:

git status

Deberías ver una salida similar a esta:

On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean

Desglosemos esta salida:

  • On branch master: Esto te dice que actualmente estás en la rama (branch) master. Las ramas son como diferentes líneas de tiempo en tu proyecto.
  • Your branch is up to date with 'origin/master': Esto indica que tu rama local master está sincronizada con la rama remota origin/master (aprenderemos más sobre repositorios remotos más adelante).
  • nothing to commit, working tree clean: ¡Este es el estado ideal! Significa que no hay cambios en tu proyecto que no se hayan guardado (confirmado, commit) en el historial de Git.

El comando git status es crucial porque te ayuda a entender qué archivos se han modificado, cuáles son nuevos y no se están rastreando (untracked), y qué cambios están listos para ser confirmados. Es el primer comando que debes ejecutar después de hacer cualquier cambio en tu proyecto para ver cómo Git ve esos cambios.

Usar git diff para inspeccionar modificaciones

En este paso, aprenderemos cómo usar el comando git diff para ver los cambios exactos que has realizado en tus archivos. Mientras que git status te dice qué archivos han cambiado, git diff te muestra qué ha cambiado dentro de esos archivos.

Primero, hagamos un cambio en nuestro archivo message.txt. Asegúrate de seguir estando en el directorio ~/project/my-time-machine.

Abre el archivo usando el editor nano:

nano message.txt

Agrega una nueva línea al archivo, por ejemplo:

Hello, Future Me
This is a new line.

Presiona Ctrl + X para salir, luego Y para guardar y Enter para confirmar el nombre del archivo.

Ahora que hemos modificado el archivo, veamos cómo Git ve este cambio usando git status:

git status

Deberías ver una salida que indique que message.txt ha sido modificado:

On branch master
Your branch is up to date with 'origin/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 está modified (modificado) y que los cambios no están preparados para un commit (no staged for commit). Esto significa que hemos cambiado el archivo, pero aún no le hemos dicho a Git que prepare este cambio para un commit.

Ahora, usemos git diff para ver los cambios específicos:

git diff

Verás 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
+This is a new line.

Entendamos esta salida:

  • Las líneas que comienzan con --- y +++ muestran el archivo original (a/message.txt) y el nuevo archivo (b/message.txt).
  • La línea que comienza con @@ se llama "hunk header" (encabezado de bloque). Muestra dónde se encuentran los cambios en el archivo. -1 +1,2 significa que a partir de la línea 1 en el archivo original, se eliminó 1 línea, y a partir de la línea 1 en el nuevo archivo, se agregaron 2 líneas.
  • Las líneas que comienzan con - muestran las líneas que se eliminaron.
  • Las líneas que comienzan con + muestran las líneas que se agregaron.

En nuestro caso, agregamos una línea, por lo que ves una línea que comienza con +.

El comando git diff es increíblemente útil para revisar tus cambios antes de prepararlos (stage) o confirmarlos (commit). Te ayuda a detectar errores y a asegurarte de que solo estás incluyendo las modificaciones deseadas en tus commits.

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

Combinar comprobaciones de cambios preparados (staged) y no preparados (unstaged)

En este paso, exploraremos cómo Git maneja tanto los cambios preparados (staged) como los no preparados (unstaged) y cómo se puede usar git diff para inspeccionarlos.

Recuerda del paso anterior que modificamos message.txt pero no preparamos (staged) los cambios. Vamos a preparar los cambios ahora usando git add:

git add message.txt

Ahora, ejecutemos git status de nuevo:

git status

La salida debería mostrar que los cambios ahora están preparados (staged):

On branch master
Your branch is up to date with 'origin/master'.

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

Git ahora muestra Changes to be committed (Cambios para ser confirmados), lo que indica que las modificaciones a message.txt están en el área de preparación (staging area), listas para el próximo commit.

¿Qué pasa si ejecutamos git diff ahora?

git diff

Puedes sorprenderse al ver que no hay salida. Esto se debe a que git diff por defecto muestra la diferencia entre tu directorio de trabajo y el área de preparación (staging area). Dado que los cambios en nuestro directorio de trabajo son ahora los mismos que los cambios en el área de preparación (porque acabamos de agregarlos), no hay diferencia que mostrar.

Para ver la diferencia entre el área de preparación y el último commit, necesitamos usar una forma diferente del comando git diff:

git diff --staged

O, de manera equivalente:

git diff --cached

Ambos comandos hacen lo mismo. Vamos a ejecutarlo:

git diff --staged

Ahora deberías ver la diferencia entre los cambios preparados 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
+This is a new line.

Esto muestra el cambio exacto que hicimos: agregar la línea "This is a new line.".

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 fundamental para usar Git de manera efectiva. Te permite revisar detenidamente tus cambios en diferentes etapas antes de hacer un commit permanente.

Resumen

En este laboratorio, aprendimos cómo verificar los cambios no confirmados (uncommitted) en un repositorio de Git. Comenzamos usando el comando git status para obtener una visión general del estado del repositorio, incluyendo la rama (branch) actual y si hay archivos modificados, nuevos o no rastreados (untracked). Este comando es esencial para entender qué cambios están presentes.

A continuación, exploramos el comando git diff para inspeccionar las modificaciones específicas realizadas dentro de los archivos. Mientras que git status nos dice qué archivos han cambiado, git diff muestra las diferencias exactas línea por línea, lo que nos permite revisar el contenido de nuestros cambios antes de prepararlos (stage) o confirmarlos (commit).