Cómo comprobar si un repositorio de Git tiene confirmaciones no enviadas

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 tiene confirmaciones (commits) que aún no se han enviado a un repositorio remoto. Exploraremos diferentes métodos para identificar estas confirmaciones "no enviadas", comenzando con el comando fundamental git status para ver si tu rama local está por delante de su contraparte remota.

Luego, aprenderás cómo usar git log @{u}..HEAD para listar específicamente las confirmaciones que están presentes localmente pero no en la rama upstream. Finalmente, tocaremos brevemente cómo verificar el estado en todas las ramas para garantizar una comprensión integral del estado de tu repositorio. Al final de este laboratorio, estarás equipado con los comandos esenciales para administrar y seguir de manera efectiva los cambios locales de Git antes de enviarlos al repositorio remoto.


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/BranchManagementGroup -.-> git/log("Show Commits") subgraph Lab Skills git/add -.-> lab-560092{{"Cómo comprobar si un repositorio de Git tiene confirmaciones no enviadas"}} git/status -.-> lab-560092{{"Cómo comprobar si un repositorio de Git tiene confirmaciones no enviadas"}} git/commit -.-> lab-560092{{"Cómo comprobar si un repositorio de Git tiene confirmaciones no enviadas"}} git/log -.-> lab-560092{{"Cómo comprobar si un repositorio de Git tiene confirmaciones no enviadas"}} end

Verificar el estado de Git para confirmaciones por delante

En este paso, aprenderemos cómo verificar si tu rama local está "por delante" de la rama remota utilizando git status. Este es un escenario común cuando has realizado confirmaciones (commits) localmente pero aún no las has enviado a un repositorio remoto.

Primero, asegúremos de estar en el directorio de nuestro proyecto. Abre tu terminal y navega hasta el directorio my-time-machine:

cd ~/project/my-time-machine

Ahora, creemos un nuevo archivo y agreguemos algo de contenido a él. Simularemos realizar un cambio que eventualmente confirmaremos.

echo "This is a new line for the future." >> message.txt

Este comando agrega el texto "This is a new line for the future." al archivo message.txt que creamos anteriormente.

A continuación, preparemos este cambio utilizando git add:

git add message.txt

Ahora, creemos una nueva confirmación con un mensaje que describa el cambio:

git commit -m "Add another message to the future"

Deberías ver una salida similar a esta, lo que indica que se ha creado una nueva confirmación:

[master a1b2c3d] Add another message to the future
 1 file changed, 1 insertion(+)

Ahora que tenemos una nueva confirmación localmente, verifiquemos el estado de nuestro repositorio nuevamente utilizando git status:

git status

Esta vez, la salida será diferente. Deberías ver algo como esto:

On branch master
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)

nothing to commit, working tree clean

La línea "Your branch is ahead of 'origin/master' by 1 commit." nos dice que nuestra rama local master tiene una confirmación que no está presente en la rama origin/master (que representa la versión remota de nuestra rama). Esta es una situación muy común cuando estás trabajando en un proyecto y realizas cambios localmente antes de compartirlos con otros.

Comprender git status es crucial porque te da una imagen clara del estado actual de tu repositorio. Te dice qué archivos se han modificado, qué cambios están preparados y si tu rama local está sincronizada con la rama remota. Esto te ayuda a llevar un seguimiento de tu trabajo y a prepararte para enviar tus cambios a un repositorio remoto.

Usar git log @{u}..HEAD

En el paso anterior, vimos que git status nos dice que nuestra rama local está por delante de la rama remota. Pero, ¿cómo podemos ver qué confirmaciones (commits) están por delante? Aquí es donde el comando git log @{u}..HEAD resulta útil.

La sintaxis @\{u\} (o @{upstream}) se refiere a la rama upstream que está siguiendo tu rama actual. En nuestro caso, dado que no hemos establecido explícitamente una rama upstream, Git utiliza origin/master como valor predeterminado (suponiendo que origin es el nombre del repositorio remoto y master es el nombre de la rama). HEAD se refiere al final de tu rama local actual.

Así, @{u}..HEAD significa "muéstrame las confirmaciones que están en mi rama actual (HEAD) pero no en la rama upstream (@{u})".

Intentémoslo en nuestro directorio my-time-machine:

cd ~/project/my-time-machine
git log @{u}..HEAD

Deberías ver una salida similar a esta:

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

    Add another message to the future

Esta salida muestra la confirmación que acabamos de crear en el paso anterior. Esto confirma que esta confirmación específica es la que está "por delante" de la rama remota.

Usar git log @{u}..HEAD es una forma poderosa de ver exactamente qué cambios estás a punto de enviar a un repositorio remoto. Te ayuda a revisar tu trabajo y a asegurarte de que solo estás enviando las confirmaciones deseadas.

Recuerda que puedes presionar q para salir de la vista del registro.

Verificar con todas las ramas

En los pasos anteriores, usamos git status para ver que nuestra rama local está por delante y git log @{u}..HEAD para ver las confirmaciones específicas que están por delante. Ahora, usemos git log --all --decorate --oneline --graph para visualizar el historial de confirmaciones de todas las ramas, lo que puede ayudarnos a entender la relación entre nuestras ramas locales y remotas.

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

cd ~/project/my-time-machine

Ahora, ejecuta el siguiente comando:

git log --all --decorate --oneline --graph

Desglosemos las opciones:

  • --all: Muestra el historial de todas las ramas.
  • --decorate: Muestra los nombres de las ramas y etiquetas (tags) junto a las confirmaciones a las que apuntan.
  • --oneline: Muestra cada confirmación en una sola línea.
  • --graph: Dibuja una representación gráfica basada en texto del historial de confirmaciones en el lado izquierdo de la salida.

Deberías ver una salida similar a esta:

* a1b2c3d (HEAD -> master) Add another message to the future
* e4f5g6h (origin/master) Send a message to the future

En esta salida:

  • La línea superior muestra nuestra última confirmación (a1b2c3d) con el mensaje "Add another message to the future". (HEAD -> master) indica que nuestro HEAD actual (donde estamos trabajando actualmente) y la rama local master apuntan a esta confirmación.
  • La línea de abajo muestra la confirmación anterior (e4f5g6h) con el mensaje "Send a message to the future". (origin/master) indica que la rama origin/master (la rama de seguimiento remoto) apunta a esta confirmación.

El gráfico de la izquierda (el * y las líneas) muestra visualmente que nuestra rama local master se ha adelantado una confirmación respecto a la rama origin/master. Esto confirma lo que git status nos dijo anteriormente.

Este comando es increíblemente útil para visualizar el historial de tu repositorio, especialmente cuando tienes múltiples ramas. Te ayuda a entender cómo las ramas divergen y se fusionan, y en qué posición se encuentran tus ramas locales en relación con las ramas remotas.

Presiona q para salir de la vista del registro.

Resumen

En este laboratorio, aprendimos cómo verificar si un repositorio de Git tiene confirmaciones (commits) no enviadas. Comenzamos utilizando git status para determinar si nuestra rama local estaba "por delante" de la rama remota. Esto implicó navegar hasta el directorio del proyecto, crear y preparar (stage) un nuevo archivo, y confirmar los cambios. Después de confirmar, ejecutar git status nuevamente mostró claramente que nuestra rama local estaba una confirmación por delante de la remota, lo que indicaba la presencia de cambios no enviados.

El laboratorio demostró la aplicación práctica de git status para identificar confirmaciones no enviadas, destacando su importancia para entender el estado de sincronización entre los repositorios locales y remotos.