informatica:programacion:cursos:control_version_git_avanzado:conflictos
Diferencias
Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
| informatica:programacion:cursos:control_version_git_avanzado:conflictos [2023/05/29 11:08] – tempwin | informatica:programacion:cursos:control_version_git_avanzado:conflictos [2023/06/01 19:09] (actual) – tempwin | ||
|---|---|---|---|
| Línea 2: | Línea 2: | ||
| Sección perteneciente al curso [[informatica: | Sección perteneciente al curso [[informatica: | ||
| + | |||
| + | ===== Introducción ===== | ||
| + | |||
| + | Uno de los grandes quebraderos de cabeza de los que se inician en Git son los conflictos. | ||
| + | |||
| + | ===== Qué significan y cómo resolverlos ===== | ||
| + | |||
| + | Un conflicto no es un error. | ||
| + | |||
| + | Un conflicto aparece cuando hay dos versiones de código y Git no puede decidir cuál es la definitiva. | ||
| + | |||
| + | Esto pasa por ejemplo cuando mezclamos dos ramas y en una hay un archivo que contiene un texto en una línea y en la otra existe el mismo archivo, pero con otro texto en esa línea. | ||
| + | |||
| + | A veces los conflictos también son diferencias en el formato del archivo (tabulaciones, | ||
| + | |||
| + | También pueden aparecer conflictos en cualquier operación que implique fusión de código: | ||
| + | |||
| + | **Regla de oro**: Siempre que aparezcan conflictos, primero lanzar '' | ||
| + | |||
| + | Git espera a que resolvamos los conflictos y le demos la orden de cerrar la operación. | ||
| + | |||
| + | Los conflictos se delimitan por marcas en los archivos: | ||
| + | |||
| + | < | ||
| + | <<<<<<< | ||
| + | // Código del commit o rama | ||
| + | // a donde apunta el HEAD | ||
| + | | ||
| + | ======= | ||
| + | |||
| + | // Código del commit o rama | ||
| + | // que estoy intentando fusionar con HEAD | ||
| + | |||
| + | >>>>>>> | ||
| + | </ | ||
| + | |||
| + | En la parte de arriba está el código actual y en la parte de abajo el código que viene de otro repositorio, | ||
| + | |||
| + | Cuando Git nos enseña conflictos, lo primero que hay que hacer es buscar el separador ('' | ||
| + | |||
| + | Si queremos resolverlos a mano, editaremos el texto, borraremos las marcas y dejamos el código definitivo. | ||
| + | |||
| + | Una vez resueltos los conflictos, se lo comunicamos a git: | ||
| + | |||
| + | < | ||
| + | git add < | ||
| + | </ | ||
| + | |||
| + | Para terminar la fusión en un '' | ||
| + | |||
| + | < | ||
| + | git commit | ||
| + | </ | ||
| + | |||
| + | Para terminar la fusión en un '' | ||
| + | |||
| + | < | ||
| + | git rebase --continue | ||
| + | </ | ||
| + | |||
| + | Para terminar la fusión en un '' | ||
| + | |||
| + | < | ||
| + | git cherry-pick --continue | ||
| + | </ | ||
| + | |||
| + | <WRAP center round tip 60%> | ||
| + | Recordemos usar '' | ||
| + | </ | ||
| + | |||
| + | ===== Herramientas para resolver conflictos ===== | ||
| + | |||
| + | Si queremos usar una interfaz gráfica específica para resolver conflictos: | ||
| + | |||
| + | < | ||
| + | git mergetool | ||
| + | </ | ||
| + | |||
| + | <WRAP center round info 60%> | ||
| + | '' | ||
| + | </ | ||
| + | |||
| + | '' | ||
| + | |||
| + | < | ||
| + | git config --global merge.tool kdiff3 | ||
| + | git config --global mergetool.kdiff3.path " | ||
| + | </ | ||
| + | |||
| + | Al usar una herramienta gráfica, git crea una copia del fichero origen del conflicto con las marcas de conflicto por si queremos revisar (añade la extensión '' | ||
| + | |||
| + | ===== Conclusión ===== | ||
| + | |||
| + | Un conflicto no es un error. Es parte del flujo de trabajo habitual con git siempre que estemos fusionando código. | ||
| + | |||
| + | Git hay cosas que no puede resolver él solo y requiere de intervención humana para decidir. | ||
| + | |||
| + | Cuando hay conflicto, '' | ||
| + | |||
| + | ===== Recursos ===== | ||
| + | |||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | |||
informatica/programacion/cursos/control_version_git_avanzado/conflictos.1685351305.txt.gz · Última modificación: por tempwin
