Más sobre conflictos

Todo un vídeo dedicado a conflictos. Os vuelvo a explicar cómo ocurren y cómo resolverlos. Como abortar un conflicto. Y mi experiencia personal en dónde suelen ocurrir conflictos en Git.

Cuando trabajamos con Git, los conflictos son algo natural y no debemos temerles. A diferencia de otros sistemas de control de versiones como SVN, donde resolver un conflicto podía ser una tarea complicada y tediosa, en Git la resolución es mucho más sencilla y, además, contamos con herramientas para deshacer fusiones si algo no sale como esperamos.

Para entender mejor cómo manejar estos conflictos, podemos imaginar una situación práctica. Supongamos que tenemos un archivo llamado main.py y dos ramas diferentes, rama A y rama B. En rama A hacemos una modificación en main.py y la confirmamos con un commit. Luego, en rama B, también modificamos el mismo archivo, pero en líneas que coinciden con las de rama A. Cuando intentamos fusionar estas ramas en master, Git detecta que hay un conflicto porque ambas ramas han cambiado las mismas líneas y no sabe cuál versión debe conservar.

Cuando esto sucede, Git nos muestra el archivo con las dos versiones enfrentadas, separadas por líneas con símbolos especiales. Por ejemplo, veremos algo así:

<<<<<<< HEAD
Modificación en rama A
=======
Modificación en rama B
>>>>>>> rama B

Aquí, la parte entre <<<<<<< HEAD y ======= corresponde a la versión que está en la rama base (en este caso, rama A ya fusionada en master), y la parte entre ======= y >>>>>>> rama B es la versión que viene de la rama que intentamos fusionar (rama B). Nuestro trabajo es decidir qué versión queremos conservar: podemos quedarnos con la de rama A, con la de rama B, o combinar ambas para crear una solución que integre los cambios de las dos.

Es importante destacar que los conflictos suelen ocurrir cuando dos personas modifican las mismas líneas de código, pero también es común que aparezcan en zonas como los imports en Java, donde varias personas pueden añadir líneas en la misma sección, lo que confunde a Git.

Cuando nos enfrentamos a un conflicto, lo mejor es dialogar con el equipo para entender qué cambios se han hecho y cuál es la mejor forma de integrarlos. El conflicto no es un problema técnico insalvable, sino una oportunidad para coordinarse y mejorar el código en conjunto.

Si en algún momento nos sentimos abrumados por la cantidad de conflictos o por la complejidad de la fusión, Git nos ofrece la posibilidad de abortar la operación con el comando:

git merge --abort

Esto cancela la fusión y deja el repositorio en el estado anterior, permitiéndonos tomar un respiro, analizar la situación y planificar cómo resolver los conflictos con calma.

En definitiva, resolver conflictos en Git es una parte normal del trabajo colaborativo. Aunque al principio pueda parecer intimidante, con práctica y comunicación se vuelve una tarea sencilla y manejable. No debemos evitar hacer fusiones por miedo a los conflictos, porque eso limita nuestro flujo de trabajo y el aprovechamiento de las ventajas que Git nos ofrece para colaborar de forma eficiente.

Lista de reproducción
  1. 1
    ¿Qué es Git?
    4 minutos
  2. 2
    Cómo instalar Git
    9 minutos
  3. 3
    Creando tu primer commit
    9 minutos
  4. 4
    Qué es el staging area
    10 minutos
  5. 5
    Cómo deshacer modificaciones de archivos
    7 minutos
  6. 6
    Cómo deshacer un commit con reset
    7 minutos
  7. 7
    Cómo revertir un commit con revert
    7 minutos
  8. 8
    Introducción a las ramas
    6 minutos
  9. 9
    Cómo crear y modificar ramas
    6 minutos
  10. 10
    Commits bajo el workflow Feature Branch
    6 minutos
  11. 11
    Cómo fusionar ramas con merge
    6 minutos
  12. 12
    Fusiones conflictivas
    9 minutos
  13. 13
    Cómo construir alias
    7 minutos
  14. 14
    Más sobre conflictos
    9 minutos
  15. 15
    Etiquetas
    7 minutos
  16. 16
    Tags anotados
    9 minutos
  17. 17
    git stash: esconder cambios
    6 minutos
  18. 18
    Introducción a remotos
    5 minutos
  19. 19
    Pusheando a un remoto
    6 minutos
  20. 20
    Clonando y haciendo pull
    6 minutos
  21. 21
    Fetch y pull rebases
    8 minutos
  22. 22
    Rebase
    7 minutos
  23. 23
    Rebase interactivo
    6 minutos
  24. 24
    Master, main y otros nombres de rama
    9 minutos
  25. 25
    git switch
    9 minutos
  26. 26
    git-restore
    10 minutos
  27. 27
    git-grep
    11 minutos
  28. 28
    Gitignore
    11 minutos
  29. 29
    El flag --patch
    9 minutos
  30. 30
    git-apply y parches en bruto (advanced)
    9 minutos
  31. 31
    Merge octopus (advanced)
    9 minutos
  32. 32
    Conventional commits
    12 minutos
  33. 33
    Merge and squash (GitLab / GitHub...)
    6 minutos
  34. 34
    git merge --squash
    7 minutos
  35. 35
    git-bisect
    8 minutos
  36. 36
    git-blame
    6 minutos
  37. 37
    git-reflog
    10 minutos
  38. 38
    Git para la Bash
    11 minutos
  39. 39
    Submódulos (parte 1)
    7 minutos
  40. 40
    Submódulos (parte 2)
    10 minutos
  41. 41
    Otros clientes Git (último episodio)
    9 minutos