Lista de verificación para la resolución de conflictos de fusión
Un proceso tranquilo y repetible para resolver conflictos de fusión y rebase de Git en repositorios de Python, especialmente pyproject.toml, uv.lock y migraciones de Alembic.
Cómo usar esta lista de verificación
- Sigue los elementos en orden durante un conflicto activo; no saltes directamente a editar marcadores.
- Un archivo completamente resuelto y probado antes de pasar al siguiente cuando los conflictos son grandes.
- Si te quedas atascado en un archivo durante más de 30 minutos, haz una pausa y trabaja en pareja; las migraciones y los archivos de bloqueo se benefician de un segundo revisor.
- Registra la causa del conflicto en la descripción del PR para evitar colisiones repetidas.
Fase 1 - Estabilizar
- Confirma el tipo de operación: Asegúrate de si estás en
merge,rebaseocherry-pick;git statusmuestra el estado actual. - Lista los archivos en conflicto:
git diff --name-only --diff-filter=U; esperapyproject.toml,uv.lock,alembic/versions/*.py. - Aborta si la rama es incorrecta:
git merge --abortogit rebase --abortsi comenzaste en una base incorrecta. - Guarda el trabajo en progreso no relacionado:
git stash push -m "pre-conflict"si las ediciones no confirmadas se mezclan con la resolución de conflictos. - Obtén lo último del remoto:
git fetch originpara resolver contra la ramamainactual, no una copia local obsoleta.
Fase 2 - Comprender
- Lee ambos lados: Abre el archivo en conflicto;
<<<<<<<,=======,>>>>>>>marcan el tuyo frente a la entrada. - Verifica los mensajes de confirmación:
git log --oneline --left-right HEAD...MERGE_HEAD(para fusión) o las confirmaciones entrantes en rebase. - Identifica la intención semántica: ¿Es el conflicto cosmético (orden de importación) o de comportamiento (versión de dependencia, revisión de migración)?
- Regla del archivo de bloqueo: Para
uv.lock/poetry.lock, elige el lado ganador depyproject.toml, elimina los marcadores de conflicto y ejecutauv lock. - Regla de migración: Para Alembic, nunca dupliques los IDs de revisión; puede que necesites
alembic merge headsdespués de la resolución.
Fase 3 - Resolver
- Resuelve un archivo a la vez: Elimina todos los marcadores de conflicto; deja sintaxis válida de Python/TOML.
- Prefiere la política de dependencias del upstream: Cuando no estés seguro sobre la versión de una biblioteca, alinéate con
maina menos que el ticket requiera una actualización. - Ejecuta el formateador en Python modificado:
uv run ruff formaten los archivos.pyresueltos. - Prepara el archivo resuelto:
git add <archivo>solo cuando los marcadores se hayan eliminado por completo;git diff --checkdetecta los que quedan. - Continúa la operación:
git rebase --continueo completa la confirmación de fusión después de que todos los archivos estén preparados.
Fase 4 - Verificar
- Sincroniza el entorno:
uv sync --frozendebe tener éxito después de la resolución del archivo de bloqueo. - Limpia:
uv run ruff check . - Comprobación de tipos (si está configurado):
uv run mypy src/o pyright en los paquetes afectados. - Pruebas:
uv run pytest -q; pruebas del módulo afectado como mínimo si la suite completa es lenta. - Migraciones:
uv run alembic upgrade headen la base de datos local cuando los archivos de migración entraron en conflicto.
Fase 5 - Finalizar
- Revisa el tamaño del diff:
git diff origin/main...HEAD; asegúrate de que no haya eliminaciones accidentales del trabajo de otros. - Fuerza el push de forma segura después del rebase:
git push --force-with-leasesolo en tu rama de características. - Comentario en el PR: Anota los archivos en conflicto y cómo elegiste las versiones; esto ayuda a los revisores a centrarse.
- Prevención de seguimiento: Divide el ticket o haz rebase con más frecuencia si los mismos archivos entran en conflicto repetidamente.
- Cierra el ciclo con el autor: Si el cambio entrante fue malinterpretado, sincronízate con el autor de la confirmación original antes de fusionar.
Aplicación de la lista de verificación en orden
- Fases 1-2 (1-10): La comprensión antes de editar evita fusiones del lado incorrecto que pasan las pruebas pero rompen las dependencias de producción.
- Fases 3-4 (11-20): Las puertas de verificación detectan archivos de bloqueo que se analizan pero fijan versiones incompatibles.
- Fase 5 (21-25): La comunicación reduce los conflictos repetidos en archivos "calientes" como
pyproject.toml.
Preguntas frecuentes
¿Fusionar o abortar un rebase complicado?
Si los conflictos afectan inesperadamente a más de ~10 archivos, aborta e intenta una confirmación de fusión en su lugar, o fusiona main una vez y luego reanuda rebase más pequeños.
¿La resolución automática de conflictos del IDE es segura?
Usa la fusión de 3 vías del IDE para fuentes de Python; nunca resuelvas automáticamente archivos de bloqueo o migraciones.
¿Conflicto solo en __pycache__ o .venv?
Esos deberían estar en .gitignore; git rm --cached y arregla .gitignore, no confirmes artefactos.
¿Conflictos en JSON de Notebooks?
Prefiere nbstripout pre-commit para prevenirlos; consulta Git para Datos/Notebooks.
Relacionados
- Ramificación y Fusión - cuándo surgen conflictos
- Comandos Esenciales de Git - comandos de abortar/continuar
- Resolución de Dependencias y Archivos de Bloqueo - política de bloqueo
- Alembic - fusiones de migración
Versiones de la pila: Esta página fue escrita para Python 3.14.0 (estable 3.14, mantenimiento 3.13), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+ y uv 0.6+.