Tema 16: Resolver o cancelar conflictos de merge
Un conflicto aparece cuando Git no puede decidir cómo combinar ciertos cambios. Un caso habitual es que dos ramas sustituyan la misma línea por textos distintos. No es una pérdida del historial: la integración se detiene para que una persona decida.
Durante un conflicto, git status identifica los archivos pendientes. En un archivo de texto pueden aparecer marcadores: <<<<<<< HEAD introduce la versión de la rama actual, ======= separa las dos propuestas y >>>>>>> cierra la otra versión. No forman parte del texto que quieres entregar.
Lee ambas intenciones y escribe el contenido final. Puedes conservar una propuesta o crear una tercera que combine lo necesario. Elimina todos los marcadores, conserva el resto del documento y ejecuta git add README.md. Preparar significa que has decidido la resolución de ese archivo, no que Git haya comprobado su significado.
Cuando todos los archivos estén resueltos y preparados, crea el commit con git commit -m "Resuelve el título". La operación pendiente añade los dos padres de la integración. Consulta log y status para comprobar que el merge terminó y el trabajo está limpio.
Si decides no continuar, git merge --abort vuelve al estado anterior al intento de integración. En nuestras prácticas se empieza con trabajo limpio, por lo que la recuperación es clara. No uses una restauración de archivos sueltos como sustituto de cancelar la operación completa.
Los dos retos permiten aprender ambas decisiones. En el de resolución, el texto pedido es una especificación funcional: no basta con borrar símbolos dejando un contenido vacío o quitando partes que debían conservarse.
Comandos para probar #
1git status 2git merge feature/saludo 3git status 4git add README.md 5git commit -m "Resuelve el título" 6git log --oneline --graph --all
Error que conviene evitar #
Confirmar después de eliminar marcadores sin revisar el contenido, o editar la solución sin prepararla. Revisa, prepara y después confirma.
Laboratorio local #
Prueba los comandos y observa qué cambia. Puedes reiniciar sin guardar una entrega. Los retos evaluables y el cuestionario están en las actividades de este tema.
Git / práctica local
Decide el texto final
Aplicar edición cambia el archivo; git add lo prepara.
Historial de commits
Las líneas conectan los commits con sus padres. Los commits que ya no tienen una referencia también permanecen visibles en este laboratorio.
- 0000004: Actualiza título; HEAD → main
- 0000003: Añade pie; feature/saludo
- 0000002: Prepara documento;
- 0000001: Commit inicial;
Comparar trabajo, índice y HEAD
Trabajo
Título de main Centro Pie inicial
Índice (staging)
Título de main Centro Pie inicial
HEAD
Título de main Centro Pie inicial
TERMINAL
Sesión local preparada. Escribe help para consultar los comandos de este tema.
Comandos disponibles y límites
git --version · git config --global <clave> [valor] git init · git status git add <archivo | .> · git commit -m "mensaje" · git log git log --oneline · git switch <rama> (antes: checkout) git restore [--staged] <archivo> · git commit --amend [-m "mensaje" | --no-edit] git switch --detach <commit> · HEAD · HEAD~1 git diff [--staged | <commit> <commit>] git remote [-v] · git remote add <nombre> <URL> · git remote get-url <nombre> · git remote set-url <nombre> <URL> git clone <URL> git push [-u] <remoto> <rama> ssh-keygen -t ed25519 · ssh -T git@github.com (ficticios) git branch [nombre] · git branch -m <nombre> · git branch -d <rama> · git switch -c <rama> git merge [--ff-only] <rama> git merge --no-ff <rama> · git log --graph --all --decorate git merge --abort · editar conflicto, git add y git commit -m "mensaje" help · clear
Sesión en memoria: recargar descarta la práctica. Doscientas acciones como máximo. Dos archivos editables de hasta 250 líneas. Diez ramas como máximo. El modelo no ejecuta comandos reales ni realiza conexiones externas. diff muestra contenido anterior y posterior por archivo.
Resumen
- La integración está pendiente, no se ha perdido el historial.
- Prepara el resultado elegido por la persona.
- Recupera el estado anterior a la integración en estas prácticas limpias.
- Confirmar después de eliminar marcadores sin revisar el contenido, o editar la solución sin prepararla. Revisa, prepara y después confirma.