Cómo comprobar si un repositorio Git está actualizado con el remoto

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á cómo verificar si su repositorio Git local está actualizado con respecto a su contraparte remota. Cubriremos los pasos esenciales para lograr esto, comenzando por obtener los últimos cambios del repositorio remoto sin alterar su trabajo local.

Después de la operación de obtención (fetch), aprenderá cómo comparar su rama local con la rama remota para identificar cualquier diferencia. Finalmente, exploraremos cómo usar el comando git log para verificar visualmente que sus confirmaciones (commits) locales están sincronizadas con el repositorio remoto, asegurándonos de que tenga la versión más actualizada del proyecto.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/BasicOperationsGroup(["Basic Operations"]) git(("Git")) -.-> git/BranchManagementGroup(["Branch Management"]) git(("Git")) -.-> git/CollaborationandSharingGroup(["Collaboration and Sharing"]) git/BasicOperationsGroup -.-> git/status("Check Status") git/BranchManagementGroup -.-> git/log("Show Commits") git/CollaborationandSharingGroup -.-> git/fetch("Download Updates") git/CollaborationandSharingGroup -.-> git/pull("Update & Merge") git/CollaborationandSharingGroup -.-> git/remote("Manage Remotes") subgraph Lab Skills git/status -.-> lab-560101{{"Cómo comprobar si un repositorio Git está actualizado con el remoto"}} git/log -.-> lab-560101{{"Cómo comprobar si un repositorio Git está actualizado con el remoto"}} git/fetch -.-> lab-560101{{"Cómo comprobar si un repositorio Git está actualizado con el remoto"}} git/pull -.-> lab-560101{{"Cómo comprobar si un repositorio Git está actualizado con el remoto"}} git/remote -.-> lab-560101{{"Cómo comprobar si un repositorio Git está actualizado con el remoto"}} end

Obtener cambios remotos con git fetch

En este paso, aprenderemos cómo obtener cambios de un repositorio Git remoto. Imagina que estás trabajando en un proyecto con otras personas y ellos han realizado algunas actualizaciones. git fetch es el comando que se utiliza para obtener esas actualizaciones sin cambiar tu propio trabajo.

Primero, simulemos tener un repositorio remoto. Lo haremos agregando una URL remota a nuestro repositorio local existente. En un escenario del mundo real, esta sería la URL de un repositorio alojado en una plataforma como GitHub o GitLab.

Navega hasta el directorio de tu proyecto si aún no estás allí:

cd ~/project/my-time-machine

Ahora, agreguemos una URL remota ficticia. Llamaremos a este remoto origin, que es una convención común.

git remote add origin https://github.com/example/my-time-machine.git

Este comando no produce ninguna salida, pero ha configurado tu repositorio local para conocer un repositorio remoto llamado origin.

Ahora, usemos git fetch para recuperar información sobre los cambios en el repositorio remoto. Dado que esta es una URL ficticia, git fetch en realidad no descargará ningún código, pero simulará el proceso y te mostrará lo que haría.

git fetch origin

Puedes ver una salida similar a esta (la salida exacta puede variar según tu versión y configuración de Git):

fatal: repository 'https://github.com/example/my-time-machine.git/' not found

No te preocupes por el error "repositorio no encontrado". Esto es esperado porque usamos una URL ficticia. Lo importante es que has ejecutado el comando git fetch.

En un escenario real, git fetch origin se conectaría al repositorio remoto, descargaría todos los nuevos commits y ramas que no existen en tu repositorio local y los almacenaría en un área especial. No fusiona estos cambios en tu rama de trabajo actual. Esto te permite ver qué cambios han realizado otros antes de decidir integrarlos en tu propio trabajo.

Piensa en git fetch como ir a la oficina de correos a recoger el correo. Recibes el correo (los cambios), pero no lo abres y lo pones en tu escritorio (los fusionas en tu trabajo) hasta que estés listo.

Comparar el repositorio local y remoto con git status

En este paso, usaremos el comando git status para ver cómo se compara nuestro repositorio local con el repositorio remoto después de realizar la operación de obtención (fetch).

Navega hasta el directorio de tu proyecto si aún no estás allí:

cd ~/project/my-time-machine

Ahora, ejecuta 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 indica que actualmente estás en la rama master.
  • "Your branch is up to date with 'origin/master'": Esta es la parte clave. Indica que tu rama local master tiene los mismos commits que la rama master en el remoto origin.

Aunque el comando git fetch en el paso anterior resultó en un error porque la URL remota era ficticia, Git aún actualizó su información de seguimiento interna. En un escenario real donde git fetch recupera con éxito nuevos commits, la salida de git status te diría que tu rama local está detrás de la rama remota y sugeriría que uses git pull para integrar los cambios.

El comando git status es tu ventana al estado de tu repositorio. Te dice en qué rama estás, si tu rama local está sincronizada con su contraparte remota y si tienes cambios no confirmados (uncommitted) en tu directorio de trabajo o área de preparación (staging area). Comprobar regularmente git status es una buena práctica para mantenerse informado sobre el estado de tu proyecto.

Utilizar git log para verificar los commits sincronizados

En este paso, utilizaremos el comando git log para ver el historial de commits y entender cómo git fetch afecta lo que vemos.

Navega hasta el directorio de tu proyecto si aún no estás allí:

cd ~/project/my-time-machine

Ejecuta el comando git log para ver el historial de commits:

git log

Deberías ver el commit que hiciste en el laboratorio anterior:

commit a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9 (HEAD -> master, origin/master)
Author: Jane Doe <[email protected]>
Date:   Mon Aug 7 10:00:00 2023 +0000

    Send a message to the future

Observa que la salida ahora muestra (HEAD -> master, origin/master). Esto indica que tanto tu rama local master (HEAD -> master) como la rama de seguimiento remoto para origin/master (origin/master) apuntan al mismo commit. Esto confirma que tu repositorio local está sincronizado con el remoto (o al menos, con la información que Git tiene sobre el remoto después del comando git fetch).

En un escenario real donde git fetch traiga nuevos commits del remoto, ejecutar git log te mostraría esos nuevos commits. Aparecerían en el historial del log, y el puntero origin/master estaría en el último commit del remoto, mientras que tu rama local master seguiría en tu último commit local. Esta diferencia visual en el log te ayuda a ver exactamente qué cambios están disponibles desde el remoto antes de fusionarlos.

El comando git log es esencial para entender la historia de tu proyecto. Te permite ver la secuencia de commits, quién los hizo, cuándo se hicieron y los mensajes de commit. Cuando se combina con git fetch, te ayuda a visualizar la diferencia entre tu historial local y el historial en el repositorio remoto.

Presiona q para salir de la vista del log.

Resumen

En este laboratorio, aprendimos cómo verificar si un repositorio Git local está actualizado con respecto a su contraparte remota. Comenzamos entendiendo el propósito de git fetch, que recupera los cambios del remoto sin modificar la copia de trabajo local. Simulamos agregar un remoto y luego ejecutamos git fetch para ver cómo interactuaría con el repositorio remoto.

Los pasos subsiguientes, que no se detallaron completamente en el contenido proporcionado, normalmente implicarían utilizar git status para comparar la rama local con la rama remota recuperada y git log para inspeccionar visualmente el historial de commits e identificar cualquier diferencia, confirmando así si el repositorio local está sincronizado con el remoto.