Cómo comprobar si un repositorio Git está sincronizado 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ás cómo verificar si tu repositorio Git local está sincronizado con su contraparte remota. Exploraremos métodos prácticos para determinar si tu rama local está actualizada, atrasada o adelantada con respecto a la rama remota.

El laboratorio te guiará a través del proceso de obtener cambios de un repositorio remoto y del uso de git status para evaluar el estado de la sincronización. También aprenderás cómo utilizar git log para comparar tu HEAD local con la rama de seguimiento remota (@{u}) y así identificar diferencias en el historial de confirmaciones. Finalmente, simularemos y examinaremos el estado de repositorios que se han divergido, brindándote una comprensión integral de cómo identificar y gestionar problemas de sincronización en Git.


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/add("Stage Files") git/BasicOperationsGroup -.-> git/status("Check Status") git/BasicOperationsGroup -.-> git/commit("Create Commit") git/BranchManagementGroup -.-> git/log("Show Commits") git/CollaborationandSharingGroup -.-> git/fetch("Download Updates") subgraph Lab Skills git/add -.-> lab-560100{{"Cómo comprobar si un repositorio Git está sincronizado con el remoto"}} git/status -.-> lab-560100{{"Cómo comprobar si un repositorio Git está sincronizado con el remoto"}} git/commit -.-> lab-560100{{"Cómo comprobar si un repositorio Git está sincronizado con el remoto"}} git/log -.-> lab-560100{{"Cómo comprobar si un repositorio Git está sincronizado con el remoto"}} git/fetch -.-> lab-560100{{"Cómo comprobar si un repositorio Git está sincronizado con el remoto"}} end

Obtener cambios y verificar el estado de Git

En este paso, aprenderemos cómo obtener cambios de un repositorio remoto y verificar el estado de nuestro repositorio local.

Imagina que estás trabajando en un proyecto con otras personas. Ellos podrían realizar cambios en el proyecto y guardarlos en una ubicación central (un repositorio remoto). Necesitas una forma de obtener esos cambios en tu propia copia del proyecto (tu repositorio local). Aquí es donde entra en juego git fetch.

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

cd ~/project/my-time-machine

Ahora, simulemos tener un repositorio remoto. En un escenario real, esto estaría en una plataforma como GitHub o GitLab. Para este laboratorio, usaremos un directorio local como nuestro "remoto".

git remote add origin ../my-time-machine-remote

Este comando agrega un "remoto" llamado origin que apunta a un directorio fuera de nuestro proyecto actual.

Ahora, usemos git fetch para obtener cualquier cambio de este remoto simulado.

git fetch origin

Puede que no veas mucha salida si no hay nuevos cambios, pero este comando se ha comunicado con el repositorio remoto y ha descargado cualquier nueva información, como confirmaciones (commits) y ramas, sin fusionarlas en tu rama actual.

Después de obtener los cambios, siempre es una buena idea verificar el estado de tu repositorio local para ver si hay algún cambio del remoto que aún no hayas incorporado.

git status

La salida de git status ahora te dirá si tu rama local está "actualizada" con la rama remota, o si hay cambios disponibles para ser descargados. Por ejemplo, podrías ver algo como:

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

nothing to commit, working tree clean

O, si hubiera cambios en el remoto:

On branch master
Your branch is behind 'origin/master' by 1 commit, and can be fast-forwarded.
  (use "git pull" to update your local branch)

nothing to commit, working tree clean

Comprender la salida de git status después de un git fetch es crucial. Te dice la relación entre tu rama local y la rama correspondiente en el repositorio remoto. Esto te ayuda a decidir si necesitas descargar cambios o si tu copia local ya está actualizada.

Usar git log para comparar HEAD y @{u}

En este paso, utilizaremos el comando git log para comparar el estado de nuestra rama local (HEAD) con su rama upstream (@{u}). Esta es una forma poderosa de visualizar las diferencias después de obtener los cambios.

Primero, asegúrate de estar en el directorio de tu proyecto:

cd ~/project/my-time-machine

En Git, HEAD se refiere al commit al que apunta tu rama actual. Representa el último punto de tu trabajo actual. @{u} (o @\{upstream\}) se refiere a la rama upstream que tu rama local actual está siguiendo. Por lo general, esta es la rama correspondiente en el repositorio remoto del que has obtenido los cambios.

Para ver los commits que están en tu rama local (HEAD) pero no en la rama upstream (@{u}), puedes usar el siguiente comando:

git log HEAD..@{u}

Este comando muestra los commits que son alcanzables desde @{u} pero no desde HEAD. En otras palabras, muestra los commits que están en la rama remota pero aún no en tu rama local. Si no hay tales commits (lo que significa que tu rama local está actualizada o adelantada), este comando no producirá salida.

Ahora, veamos los commits que están en la rama upstream (@{u}) pero no en tu rama local (HEAD). Esto muestra los commits que están en tu rama local pero que aún no se han enviado al remoto.

git log @{u}..HEAD

Este comando muestra los commits que son alcanzables desde HEAD pero no desde @{u}. Si no hay tales commits (lo que significa que tu rama local está actualizada o atrasada), este comando no producirá salida.

Al usar git log con la notación .., puedes comparar fácilmente el historial de dos puntos diferentes en tu repositorio, como tu rama local y su contraparte upstream. Esto es increíblemente útil para entender el estado de tu repositorio en relación con el remoto y para prepararte para descargar o enviar cambios.

Probar repositorios divergentes

En este paso, simularemos un escenario en el que tanto tu repositorio local como el repositorio remoto tienen nuevos commits que el otro no tiene. Esto se conoce como un estado de "divergencia".

Primero, asegúrate de estar en el directorio de tu proyecto:

cd ~/project/my-time-machine

Creemos un nuevo commit en nuestro repositorio local:

echo "Adding a local change" > local_change.txt
git add local_change.txt
git commit -m "Add a local change"

Ahora, simulemos un commit realizado directamente en el repositorio "remoto". Cambiaremos al directorio remoto, realizaremos un commit y luego volveremos.

cd ../my-time-machine-remote
echo "Adding a remote change" > remote_change.txt
git add remote_change.txt
git commit -m "Add a remote change"
cd ../my-time-machine

Ahora hemos creado un commit en nuestro repositorio local y un commit separado en el repositorio remoto simulado. Nuestros repositorios ahora están divergentes.

Volvamos a usar git fetch para actualizar nuestro conocimiento del repositorio remoto:

git fetch origin

Ahora, verifica el estado de tu repositorio local:

git status

Deberías ver una salida que indique que tu rama ha divergido. Algo como esto:

On branch master
Your branch and 'origin/master' have diverged,
and have 1 and 1 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)

nothing to commit, working tree clean

Este mensaje de estado te dice que tu rama local (master) y la rama de seguimiento remota (origin/master) se han avanzado con nuevos commits desde la última vez que estaban sincronizadas. Incluso sugiere usar git pull para fusionar los cambios remotos.

Comprender el estado de divergencia es importante porque es un escenario común cuando se colabora con otros. Significa que debes integrar los cambios remotos en tu rama local antes de poder enviar tus propios cambios.

Resumen

En este laboratorio, aprendimos cómo verificar si un repositorio Git local está sincronizado con su contraparte remota. Comenzamos simulando un repositorio remoto y lo agregamos a nuestro proyecto local utilizando git remote add. El paso crucial de obtener los cambios del remoto sin fusionarlos se realizó utilizando git fetch origin. Después de obtener los cambios, utilizamos git status para determinar el estado de sincronización de nuestra rama local en relación con la rama remota, observando una salida que indica si la rama está actualizada o atrasada.

Exploraremos más a fondo métodos para comparar el HEAD local con la rama de seguimiento remota utilizando git log y examinaremos escenarios que involucran repositorios divergentes para obtener una comprensión integral de la sincronización de repositorios.