← 中文资源

简体中文版本

Django MigrationConflictError: 多个叶子节点

解决 Django 迁移冲突:两个分支基于同一父迁移各自新增迁移,导致出现多个叶子节点、migrate 被阻塞。

阅读英文原文

症状

Django 报出 Conflicting migrations detected; multiple leaf nodes in the migration graph 并中止,makemigrations 与 migrate 在整理好依赖图之前都无法执行。

诊断

查看迁移计划与文件:

python manage.py showmigrations --plan
ls myapp/migrations

若两个同序号文件共享同一父节点,即可确认冲突。

修复

让 Django 生成合并迁移:

python manage.py makemigrations --merge
python manage.py migrate

生成的文件会同时依赖两个叶子。立即提交该文件,使所有分支共享同一个叶子。

验证

再次执行 showmigrations --plan,每个 app 只应剩一个叶子;migrate 应正常完成而不报冲突。