Ederson Felipe Lopez Bolivar
Alexis Dorado Muñoz
Gracias por tu aporte.
Andres Triana
gracias brooo
Cuando trabajas en equipo con Git, tarde o temprano dos personas tocarán el mismo archivo y aparecerá un merge conflict. Saber resolver conflictos de ramas en Git es la diferencia entre frenar al equipo o mantener el flujo de trabajo intacto. Aquí verás cómo provocar uno a propósito y solucionarlo línea por línea.
¿Por qué ocurre un conflicto de ramas en Git?
Un conflicto aparece cuando dos ramas modifican la misma porción de un archivo y Git no puede decidir cuál versión conservar. En lugar de elegir por ti, te entrega el control para que tú definas la versión final.
Esto pasa más seguido de lo que parece cuando varias personas trabajan en paralelo sobre el mismo repositorio. La buena noticia: Git marca cada conflicto con señalizaciones claras para que sepas exactamente qué cambió y desde dónde [01:27].
¿Qué es un conflicto en Git? Es una situación en la que dos ramas modifican las mismas líneas de un archivo y Git te pide decidir manualmente cuál cambio se queda en la versión final.
¿Cómo crear un conflicto controlado para practicar?
La mejor forma de aprender a resolver un merge conflict es provocarlo tú mismo. Estos son los pasos que sigo en la terminal para forzar el escenario [01:39]:
git branch. Si solo tienes main, perfecto.nano conflict.txt y escribe línea original dentro.git add y git commit -m "archivo de conflicto creado".git checkout -b developer para trabajar en paralelo.conflict.txt desde developer, escribe cambios desde la rama dev y haz commit.main con git checkout main o git switch main.main, escribe segundo cambio desde main y haz commit.Con esto tienes dos ramas que modificaron el mismo archivo en la misma línea. El terreno está listo para el conflicto.
¿Sirve igual git switch que git checkout?
Sí. Tanto git checkout como git switch te permiten cambiar de rama y hacen exactamente lo mismo en este contexto [03:36]. La diferencia es que git switch es más reciente y está pensado solo para ramas, mientras que git checkout cubre más operaciones.
¿Cómo resolver el conflicto al hacer merge?
Desde main, ejecuta git merge developer. Git intentará fusionar y te avisará que hay un conflicto en conflict.txt. Aquí es donde entra la parte interesante [04:30].
Abre el archivo con nano conflict.txt y verás algo así:
<<<<<<< HEAD segundo cambio desde main
cambios desde la rama dev
developer
La sección marcada con HEAD es el último cambio de tu rama principal. La sección de abajo corresponde a la rama developer. Tu trabajo es decidir qué se queda.
Puedes:
main y borrar el bloque de developer.HEAD.Lo importante: elimina las señalizaciones <<<<<<<, ======= y >>>>>>> antes de guardar. Esas marcas son guías de Git, no parte de tu código.
¿Qué significa HEAD en un conflicto de Git? HEAD apunta al último commit de la rama en la que estás parado. En un merge, indica cuál de los bloques pertenece a tu rama actual.
¿Cómo cerrar el merge y dejar limpio el repositorio?
Después de editar el archivo, guarda los cambios y verifica el estado con git status. Verás el mensaje ambos modificados en conflict.txt, lo que confirma que Git ya detectó tu intervención manual [05:35].
Desde ahí, los pasos finales son directos:
git add conflict.txt para marcar el conflicto como resuelto.git commit -m "nuevos cambios" para registrar la fusión.git merge developer si fuera necesario, o confirma que el merge ya quedó cerrado.Con esto, la versión final del documento queda unificada dentro de main.
¿Qué hago con la rama después de resolver el conflicto?
Una vez fusionada, elimina la rama adicional para evitar conflictos posteriores en commits futuros [06:05]. Una rama vieja que sigue viva suele ser fuente de nuevos merge conflicts cuando alguien la retoma sin actualizarla.
Puedes borrarla con git branch -d developer cuando ya esté integrada a main. Así mantienes tu repositorio limpio y tu equipo enfocado solo en las ramas activas.
¿Te ha tocado resolver un conflicto de Git en un proyecto real? Cuéntame en los comentarios cómo lo manejaste y qué estrategia usas con tu equipo para evitar que se repita.
Hola amigo Jose en la vida real, en lugar de usar nano manualmente, usaremos VS Code u otro editor. Cuando estés en VS Code, te aparecerán los mismos conflictos, pero el proceso será automático. VS Code te preguntará, como en el ejemplo de la clase, "ok, aquí hay dos cambios, uno se llama main y otro developer. ¿Cuál vas a querer por fin?" y tú decides si quieres main, developer o ambos cambios. VS Code modificará el código automáticamente. En pocas palabras, no tendrás que hacer nada manualmente, ya que VS Code se encargará de todo automáticamente.
Hola Jose Luis.
Al abrir el archivo con el comando nano, Lo que te muestra nano es el conflicto, las lineas al principio y al final indica el texto de inicio y el texto final del conflicto.
La lineas con la palabra Head indica que es lo modificaste o agregaste en tu rama principal
Las lineas con la palabra developer indica que fue lo que agregaste o modificaste en la rama developer.
Entonces tienes que borrar las rayas y lo que no quieres que de entre los dos cambios. Porque al momento que le des guardar, va a guardar todo lo que hayas dejado del mensaje que te apareció.
Una vez ya borrado todo lo que no necesitas, y dejar solo que quieres que quede. Entonces guardad y sigue los siguientes paso que usar
$ git add . $ git commit -m "mensajes"
Ederson Felipe Lopez Bolivar
Alexis Dorado Muñoz
Gracias por tu aporte.
Andres Triana
gracias brooo
Jonatan Martin
Estuvo super buena la clase, estuve practicando con un código de python y pues, Visual Studio Code te da por defecto las opciones de:
En la última opción te abre una nueva ventana en la que puedes navegar mejor y mirar que cosas son diferentes. Luego de eso, pues hice el commit, hice el merge y he eliminado la otra rama.
Recomiendo mucho la practica, ya que con eso a uno se le quedan las cosas
Alexis Dorado Muñoz
Gracias por tu aporte.
Edwin Ardila
Aquí voy con un step-by-step porque así lo entendí (espero les sirva y agradezco algún tip u observación):
1. Creo archivo propenso a conflictos y lo edito.
-----
2.Se crea una nueva rama donde:
2.1 Se edita archivo de conflicto.
2.2 git status, git add . , git commit -m "mensaje".
2.3 Cambiamos la rama a main.
-----
3.En rama main se modificó una vez más el archivo de conflicto y se le aplicó:
3.1 git status, git add . , git commit -m "mensaje".
-----
4.Fusionamos la rama de cambios local con la rama main -> git merge [2nd branch].
-----
5.Obtenemos mensaje de conflicto/error en las ramas por parte de Git al fusionar.
5.1Abrimos archivo de conflicto y se decide que se conserva/descarta.
5.2 git status, git add . , git commit -m "mensaje" -> commit de cambios "aprobados" donde ya no hay conflictos <3
-----
6.De nuevo hacemos el merge/fusionamos la rama de cambios local/alterna con la rama main.
-----
7.Por buena practica eliminamos la rama donde se hicieron los cambios inicialmente. -> git branch -D [branch]
Alexis Dorado Muñoz
Gracias por tu aporte.
Joel Eduardo Ordoñez Martinez
tengo entendido que cuando resuelves el conflicto y haces commit ya no es necesario volver a hacer merge porque ya tienes los cambios
Katherine Siesquen Torres
Si trabajas con archivos .txt y Git no detecta los cambios, es posible que sea un problema de codificación. Asegúrate de guardar el archivo en formato UTF-8 para que Git pueda reconocer correctamente las diferencias de contenido.
Diego Andrés Lopez Rodriguez
Para resolver conflictos de ramas en Git, sigue estos pasos:
<<<<<<<, =======, y >>>>>>>.git add, y realiza un commit.Finalmente, continúa trabajando en tu proyecto.
Santiago Cepeda
Creo que el curso hubiera sido más claro o especifico, utilizando herramientas como Oh-my-zsh o Fish para ver en que branch se están realizando los cambios o comandos que el profesor esta haciendo, solo una sugerencia para futuros cursos de Git y Github
Jassira Ramos
apoyo
Gabriel Muñoz Castro
como tip, si queremos agregar un cambio de un archivo que ya se encuentra trackeado, podemos usar el siguiente comando:
git commit -am "Mensaje commit"
Este simplifica al git add y git commit del archivo que a sido modificado.
jhoinner solarte
¿Es posible deshacer una fusión con conflictos?
Sí, absolutamente. Si estás en medio de un conflicto, ves demasiados archivos en rojo y sientes que te has equivocado o simplemente no estás listo para resolverlo en ese momento, puedes abortar la misión de emergencia.
Solo necesitas ejecutar el comando git merge --abort. Esto actuará como un botón de pánico que cancela todo el proceso de fusión y devuelve tus archivos exactamente al estado en el que estaban antes de que escribieras el comando para fusionar. Es una herramienta invaluable porque te da la tranquilidad de saber que no vas a romper tu proyecto de forma irreversible. Una vez que abortes, puedes revisar con calma los cambios de la otra rama, hablar con tu equipo para entender qué modificaron, y volver a intentar la fusión cuando tengas una estrategia clara.
Carlos Ramos
Clase 7 - Cómo resolver conflictos de ramas en Git
¿Cuando trabajamos de manera local en nuestros proyectos es normal que se presenten muchos problemas?
¿Trabajar de manera local e individual es diferente a trabajar en equipo y de forma colaborativa?
¿Cómo se llaman los problemas que nos podemos encontrar cuando trabajamos en equipo y de forma colaborativa en Git?
¿En qué consiste un conflicto de ramas en git?
¿Qué debemos hacer cuando surge un conflicto entre ramas en Git?
¿De qué formas podemos escoger los cambios que queremos que se queden en nuestro archivo cuando surge un conflicto de Ramas?
¿Qué nos ayuda a saber cuales son los cambios entrantes y actuales de nuestro archivo cuando surge un conflicto?
¿Qué debemos de hacer con las señalizaciones que agrega Git a nuestro archivo cuando hay un conflicto?
¿Qué debemos hacer una vez hayamos elegido los cambios que queremos dejar cuando surge un conflicto en Git?
¿Qué debemos de hacer luego de hacer el commit que guarda los cambios que escogimos luego de un conflicto de ramas en Git?
¿Cuál es la buena práctica que debemos de hacer luego de hacer merge a una rama?
Ricardo Aviles Sanders
Entonces 'checkout' sirve para cambiar entre branches y entre commits?
JUAN DAVID CORRALES AGUILAR
No tanto cambiar de commits, sino ir a revisar qué pasó en ese commit, cualquier cambio que hagas allí, no se verá reflejado
L. Iván Carrasquel Ballesteros
Para cambiar entre ramas y también se puede usar "git switch"
Juan Síntora
git commit --amend para cambiar tu ultimo commit por si escribiste mal el mensaje
Luis Santiago Cortés Hernández
Casi no me gusta manejar "nano" yo prefiero utilizar "vim", me parece mucho más fácil y práctica de manejar.
L. Iván Carrasquel Ballesteros
El Profe Amin usa nano porque es muy intuitivo para principiantes (muestra los comandos abajo). Pero vim es un editor mucho más potente y rápido para quienes ya dominan sus atajos de teclado.
Jhonjandrys Ramirez
Tengo una pregunta, en este caso, yo estoy desde la terminal de Windows, y veo que el profe Amin, si le permite ingresar al archivo para editar y solucionar los conflictos, por lo cual mi pregunta es:
Qué comando se ejecuta en windows, para poder abrir el archivo de esa manera y editar el archivo y subsanar el conflicto?
Amin Espinoza
ProfesorSolo escribe code . para abrir la ruta en donde te encuentras y así podrás abrir el editor de conflictos de VS Code y con eso la tienes resuelta!!!!
Daniel Cueto
Yo creía que al hacer el merge, se mezclaba todo y entonces arreglamos lo conflictos. Al resolverlos y hacer un nuevo commit de ese archivo ya sin conflictos, obtendríamos nuestro merge, pero, ¿por qué hay que volver a hacer git merge?
Platzi
Al resolver los conflictos en el archivo, se deben añadir los cambios y hacer un commit. Estos arreglan los conflictos, pero no finalizan el merge. El comando git merge debe ser ejecutado nuevamente para completar la fusión de las ramas.
Santiago Salazar Grisales
Si no estoy mal es porque el primer merge no fue exitoso, lo que hace git es decirte que hay un error para que lo corrijas y luego debes volver a ejecutar el merge ahora sin conflictos.
Osric Audesirk
Sería genial si el ejemplo lo hicieras con código real (para no complejizar la clase pueden usar .html, .md o incluso un texto literario simple) y de esa manera sería más ilustrativo.
El ejemplo fue tan simplificado que la explicación de la funcionalidad pierde algo de valor.
Richard Linarez
Estoy de acuerdo. Por más que se entienda que se puede realizar una edición al tener un conflicto, no necesariamente el saber eso significa que se pueda resolver el conflicto si sucede con código.
Pablo Rivera
SOLUCION DE CONFLITOS AL MOMENTO DE MERGEAR
git commit -am "Mensaje commit" > Este simplifica al git add y git commit del archivo que a sido modificado.Daniel Vergel
Dussan Freire
Excelente desglose del proceso de fusión. Siempre revisa el archivo después de resolver conflictos porque puede haber lógica que requiera ajustes adicionales. También recomendaría usar git diff antes de commit para validar que los cambios combinados tengan sentido en el contexto del código. Esto evita bugs silenciosos en producción.
Kenneth Angulo L
Que hacer cuando hay conflicto?