Git

Git

Tutorial Git: Resolución de conflictos

Git conflictos: resolución y manejo. Domina la resolución y manejo de conflictos en Git con ejemplos prácticos y detallados.

La resolución de conflictos en GitHub Desktop es un proceso crucial cuando múltiples colaboradores trabajan en un repositorio y realizan cambios en el mismo archivo o conjunto de archivos al mismo tiempo.

Estos conflictos ocurren cuando Git no puede determinar automáticamente cómo combinar los cambios, lo que requiere la intervención manual del usuario para resolver la discrepancia.

GitHub Desktop proporciona herramientas para ayudar a los colaboradores a resolver estos conflictos de manera eficiente y mantener la integridad del código compartido. A continuación, se explicará detalladamente este concepto.

Escenario de conflicto

Supongamos que hay dos colaboradores, Alicia y Bobi, que trabajan en un proyecto Git.

Ambos están trabajando en la misma rama y han realizado cambios en el mismo archivo llamado archivo.txt.

  1. Alicia hace un cambio en archivo.txt y lo sube al repositorio remoto.

    ## archivo.txt (versión de Alicia)
    Este es el contenido de Alicia.
    
  2. Bobi hace un cambio diferente en archivo.txt y también lo sube al repositorio remoto.

    ## archivo.txt (versión de Bobi)
    Este es el contenido de Bobi.
    

En este punto, se produce un conflicto porque ambos han editado el mismo archivo en paralelo.

Detectando el conflicto

Cuando un colaborador intenta fusionar los cambios desde el repositorio remoto, GitHub Desktop detecta estos conflictos durante el proceso de fusión o "merge" de ramas.

Un conflicto se presenta cuando hay cambios en una misma línea o en líneas cercanas del archivo.

GitHub Desktop muestra estos conflictos en el archivo en cuestión, con marcadores especiales para indicar las diferencias. Esto se reflejará en el archivo archivo.txt:

<<<<<<< HEAD
Este es el contenido de Alicia.
=======
Este es el contenido de Bobi.
>>>>>>> branch-bobi

En este ejemplo, los colaboradores hicieron cambios en el mismo párrafo y GitHub Desktop señala claramente la divergencia.

  • <<<<<<< HEAD marca el inicio del conflicto y muestra la versión actual de la rama en la que se encuentra el usuario (en este caso, Alicia).
  • ======= marca el punto medio donde comienza la versión de Bobi.
  • >>>>>>> branch-bobi marca el final del conflicto y muestra la versión de la rama de Bobi.

Resolución manual del conflicto

Para resolver este conflicto, el colaborador debe editar manualmente el archivo archivo.txt y decidir cómo combinar los cambios. Pueden optar por mantener una versión, la otra, o combinarlas de alguna manera. Las marcas conflictivas (<<<<<<<, =======, >>>>>>>) deben eliminarse del archivo una vez que se haya tomado una decisión.

Ejemplo de resolución manual:

## archivo.txt (conflicto resuelto por Alicia)
Este es el contenido de Alicia y Bobi.

En este caso, se decidió conservar ambos párrafos combinados.

Marcar el conflicto como resuelto

Una vez que se han resuelto los conflictos, se debe marcar el archivo como resuelto en GitHub Desktop.

Esto se hace mediante la opción "Mark as resolved" o "Marcar como resuelto". Esto indica que el conflicto ha sido abordado.

Finalización de la fusión

Después de marcar el archivo como resuelto, los colaboradores pueden continuar con el proceso de fusión o "merge".

Esto se puede hacer a través de GitHub Desktop o utilizando comandos en la línea de comandos, dependiendo de la preferencia de los colaboradores.

Confirmación y envío de cambios

Una vez que se ha completado la fusión, los cambios resueltos se confirman y envían al repositorio compartido.

Esto asegura que todos los colaboradores tengan acceso a la versión actualizada del código sin conflictos.

Evitar conflictos

Aunque la resolución de conflictos es una parte fundamental de trabajar con Git, es importante recordar que se pueden evitar conflictos mediante buenas prácticas de desarrollo colaborativo, como:

  • Comunicación: Mantener una comunicación efectiva con los demás colaboradores para conocer sus planes y evitar cambios conflictivos.

  • Branching estratégico: Usar ramas separadas para trabajar en diferentes características o correcciones, de modo que se minimice la posibilidad de cambios en paralelo.

  • Actualizaciones frecuentes: Realizar pull con frecuencia para mantenerse actualizado con los cambios de otros colaboradores y reducir la posibilidad de conflictos.

Conclusión

La resolución de conflictos en Git es esencial para la colaboración efectiva en proyectos de desarrollo de software y con GitHub Desktop es un proceso sencillo. Los conflictos pueden surgir cuando varios colaboradores modifican el mismo archivo simultáneamente, y es responsabilidad del usuario resolverlos de manera adecuada, eligiendo entre las estrategias disponibles o combinando cambios manualmente. La comunicación y las buenas prácticas pueden ayudar a prevenir conflictos, lo que contribuye a un flujo de trabajo más eficiente y a la integridad del código en el repositorio.

Certifícate en Git con CertiDevs PLUS

Ejercicios de esta lección Resolución de conflictos

Evalúa tus conocimientos de esta lección Resolución de conflictos con nuestros retos de programación de tipo Test, Puzzle, Código y Proyecto con VSCode, guiados por IA.

Todas las lecciones de Git

Accede a todas las lecciones de Git y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.

Certificados de superación de Git

Supera todos los ejercicios de programación del curso de Git y obtén certificados de superación para mejorar tu currículum y tu empleabilidad.

En esta lección

Objetivos de aprendizaje de esta lección

  1. Comprender la importancia de la resolución de conflictos en GitHub Desktop.
  2. Identificar escenarios de conflicto.
  3. Aprender la resolución manual de conflictos.
  4. Aplicar buenas prácticas para evitar conflictos.