Cómo mantener las ramas actualizadas y resolver conflictos de fusión en GitHub y VS Code

> Hola {nombre de usuario}, hemos fusionado un PR antes del tuyo. Por favor resuelve los conflictos de fusión para que podamos revisar y fusionar tu PR. ¿Alguna vez has recibido ese tipo de mensaje de un mantenedor mientras esperas que tu pull request sea revisado y fundido? Y entonces, ¡entraste en pánico porque...

¡Hola {username}! Hemos fusionado un PR antes que el tuyo. Por favor, resuelve los conflictos de fusión para que podamos revisar y fusionar tu PR.

¿Alguna vez has recibido ese tipo de mensaje de un mantenedor mientras esperas que revisen y fusionen tu pull request? ¿Y luego entras en pánico porque no sabes qué hacer? ¿O tal vez estás pensando en cerrar tu pull request, empezar de nuevo y abrir uno nuevo?

Bueno, la buena noticia es que no estás solo.

En este artículo, te mostraré cómo mantener actualizadas tus ramas remota y local. También te guiaré en la resolución de conflictos de fusión en GitHub y VS Code.

Tabla de contenidos

Requisitos previos

Para seguir este tutorial, necesitarás lo siguiente:

Comprendiendo los conflictos de fusión

Los conflictos de fusión suelen ocurrir cuando dos commits tienen cambios en la misma línea(s) del mismo(s) archivo(s) desde dos ramas diferentes. A veces, también puede suceder cuando alguien edita un archivo y otra persona lo elimina.

El problema es que Git no puede resolver el conflicto por sí mismo. Necesita tu ayuda para decidir qué cambios deben conservarse.

Cuando hay un conflicto de fusión, verás una notificación en tu pull request en GitHub que indica que hay conflictos que deben resolverse en la rama. Los mantenedores no pueden fusionar un pull request cuando ocurren conflictos de fusión. Esto se debe a que el botón de fusión estará desactivado hasta que se resuelvan los conflictos.

branch-has-conflicts
Advertencia en el pull request de GitHub: Esta rama tiene conflictos que deben resolverse

Cómo mantener actualizadas las ramas

Mantener tus ramas actualizadas es crucial. Se recomienda actualizar habitualmente tus ramas remotas y locales main y de trabajo.

Los mejores momentos para actualizar tus ramas son:

  • antes de crear una nueva rama para trabajar en un problema,
  • después de confirmar tus últimos cambios y antes de enviarlos al repositorio remoto,
  • mientras esperas que revisen tu pull request.

Cuando un pull request se fusiona mientras esperas a que revisen el tuyo, habrá una advertencia en tu pull request. Te indica que tu rama está atrasada con respecto a la rama upstream (original) del repositorio main.

branch-out-of-date
Advertencia en un pull request de GitHub: Esta rama está desactualizada con respecto a la rama base.

Cómo actualizar la rama main en tu repositorio bifurcado

  1. Ve a tu repositorio bifurcado en GitHub.
  2. Haz clic en el botón “Sincronizar bifurcación”.
  3. Haz clic en el botón verde “Actualizar rama”.
update-branch
Botones “Sync fork” y “Update branch” en GitHub.

Después de actualizar la rama, verás una notificación en la parte superior que indica que tu rama está actualizada.

up-to-date-branch-github
Notificación en GitHub: Esta rama está actualizada con organization-name/repository-name:main.

Cómo actualizar tu rama local

Ahora, tu rama remota main ha sido actualizada. Actualicemos tu rama local desde tu terminal.

Paso #1 – Ve a tu rama de trabajo

En tu terminal, navega hasta tu rama de trabajo con este comando:

git checkout nombre-de-la-rama

Paso #2 – Actualiza los cambios

Obtén los últimos cambios de la rama main de tu repositorio origin (forked) a tu rama local.

git pull origin main

Paso #3 – Sube los cambios

Sube estos cambios a tu rama remota. Si necesitas resolver conflictos, debes solucionarlos antes de poder subir tus cambios.

git push

Cómo resolver conflictos de fusión

Solo puedes empezar a resolver los conflictos de fusión después de que tu rama de trabajo esté actualizada. Hay dos formas de resolver los conflictos:

  1. En GitHub
  2. En tu VS Code

1. Resolviendo conflictos de fusión en GitHub

Resolver los conflictos directamente en GitHub solo es posible cuando la causa de los conflictos es que hay cambios en la(s) misma(s) línea(s) del(s) mismo(s) archivo(s) de dos ramas diferentes. Para cualquier otro tipo de conflictos, debes resolverlos localmente en tu editor de código.

Sigue estos pasos para resolver conflictos directamente en GitHub:

Paso #1 – Haz clic en el botón “Resolver conflictos”

Primero, ve al repositorio upstream en GitHub. Luego, haz clic en la pestaña “Pull request”. Encuentra y abre tu pull request y desplázate hacia abajo.

Al final, encontrarás el botón “Resolver conflictos”.

resolved-conflicts-button
Una notificación de “Esta rama tiene conflictos que deben resolverse” y un botón “Resolver conflictos” en GitHub.

Paso #2 – Echa un vistazo detallado a los conflictos

Después de hacer clic en el botón “Resolver conflictos”, serás redirigido al editor de conflictos de GitHub.

github-resolve-conflict-2
Editor de conflictos de GitHub

Puedes ver el o los archivo(s) que tienen conflictos en la barra lateral izquierda. En la barra superior, puedes encontrar el número de conflictos en el archivo. Y en el archivo en sí, hay marcadores de conflicto <<<<<<<, ======= y >>>>>>>.

Las líneas entre <<<<<<< nombre-de-la-rama y ======= son tus cambios. Cualquier cosa entre ======= y >>>>>>> main son los cambios de la rama main del repositorio upstream.

Debes revisar los conflictos y decidir cuál quieres mantener o si necesitas hacer cambios completamente nuevos.

Paso #3 – Resolviendo los Conflictos

Después de decidir cómo quieres resolver los conflictos, elimina los marcadores de conflicto <<<<<<<, =======, >>>>>>>. Luego puedes hacer los cambios necesarios. Si hay varios conflictos en el archivo, desplázate hacia abajo y resuélvelos antes de marcarlos como resueltos.

Una vez que hayas resuelto todos los conflictos, haz clic en el botón “Marcar como resuelto” en la barra superior.

marcar-como-resuelto
Botón “Marcar como resuelto” en GitHub.

Si hay conflictos en otro(s) archivo(s), ve al archivo haciendo clic en el nombre del archivo en la barra lateral izquierda. Luego repite los mismos pasos para resolver los conflictos.

Paso #4 – Haz clic en el botón “Combinar confirmación”

Después de haber marcado como resueltos todos los conflictos en todos los archivos conflictivos, aparecerá un botón verde de “Combinar confirmación” en la esquina superior derecha. Haz clic en el botón para confirmar tus cambios.

boton-combinar-confirmacion
Botón “Combinar confirmación” en GitHub.

2. Resolviendo Conflictos de Fusión en VS Code

Después de haber descargado los últimos cambios de la rama main de tu repositorio bifurcado, verás líneas entre los marcadores de conflicto <<<<<<<, ======= y >>>>>>>.

También verás opciones para resolver los conflictos:

  • Aceptar Cambio Actual: Cuando quieres mantener solo tus cambios.
  • Aceptar Cambio Entrante: Cuando quieres mantener solo los cambios de la rama main.
  • Aceptar Ambos Cambios: Cuando deseas mantener tus cambios y los cambios entrantes.
conflictos-de-fusion-vscode
Conflictos de fusión en VS Code.

Las líneas entre <<<<<<< HEAD (Cambio Actual) y ======= son tus cambios. Y cualquier cosa entre ======= y >>>>>>> números-de-hash (Cambio Entrante) son cambios de la rama main de tu repositorio bifurcado.

Sigue estos pasos para resolver los conflictos en VS Code:

Paso #1 – Resolviendo los Conflictos

Observa de cerca los conflictos entre los marcadores de conflicto. Luego, necesitas decidir cómo quieres resolver los conflictos.

  • Puedes eliminar manualmente los marcadores <<<<<<<, =======, >>>>>>> y hacer los cambios.

O

  • Puedes elegir y hacer clic en una de las opciones de aceptación en la parte superior y modificar los cambios según tus necesidades.
Deshacer la Fusión

Si en algún momento te sientes confundido y quieres deshacer la fusión y volver a hacer todo desde cero, ejecuta el comando git merge --abort antes de confirmar tus cambios. Esto abortará la fusión y devolverá tu archivo al estado anterior a los conflictos.

Paso #2 – Confirmar tus Cambios

Una vez que hayas terminado de resolver los conflictos, debes confirmar tus cambios. Ejecuta este comando para preparar y confirmar automáticamente los cambios:

git commit -am "Tu mensaje"
Entendiendo el Comando git commit -am

El comando git commit -am es diferente de ejecutar git add . seguido por git commit -m.

Ejecutar git add . agregará todos los archivos (incluidos los archivos recién creados) al área de preparación. Mientras que agregar la bandera -a al git commit, automáticamente agregará todos los archivos que hayas cometido antes. Incluye la preparación de archivos eliminados pero no agregará archivos recién creados.

Por lo tanto, combinar la bandera -a con la bandera -m al git commit te permite saltarte la fase de preparación y escribir directamente el mensaje para el commit.

Paso #3 – Haz Push a tus Cambios

Ahora, puedes hacer push a tus cambios en la rama remota con el siguiente comando:

git push

Palabras Finales

Si te gustó y encontraste útil este artículo, compártelo con los demás. Puedes encontrar otros trabajos en mi blog, y conectémonos en X (anteriormente Twitter) o LinkedIn.


Leave a Reply

Your email address will not be published. Required fields are marked *