Cómo reiniciar las migraciones de tu proyecto en Django…
Antes que nada debo mencionarte que el sistema de migraciones de Django fue desarrollado y optimizado para trabajar con una cantidad muy grande de migraciones. No deberías preocuparte por tener un gran número de migraciones en tu código aunque algunas veces puede causar problemas, como aumentar mucho tiempo de las pruebas unitarias de tu proyecto.
De cualquier forma, si quieres realizar una limpia te daré algunas opciones para hacerlo dependiendo de cual sea tu caso.

Caso 1 - Cómo reiniciar las migraciones de tu proyecto en Django durante el desarrollo
Si tu proyecto sigue en desarrollo temprano y no ha salido a producción puedes darte el lujo de hacer una limpia total, no te importará eliminar toda la base de datos.
1. Elimina todos los archivos de migraciones de tu proyecto
Ve por cada una de tus aplicaciones en el proyecto y elimina todo lo que se encuentre dentro de la carpeta de migraciones excepto por el archivo __init__.py
Si estás usando un sistema operativo tipo unix puedes correr los siguientes comandos desde el directorio principal de tu proyecto Django.
find . -path "*/migrations/*.py" -not -name "__init__.py" -delete
find . -path "*/migrations/*.pyc" -delete
2. Elimina la base de datos, borra el archivo db.sqlite3 si ese es tu caso
3. Crea las migraciones iniciales y genera el esquema de la base de datos
python manage.py makemigrations
python manage.py migrate
Caso 2 - Cómo reiniciar las migraciones de tu proyecto en Django en producción
Quieres eliminar las migraciones pero mantener la base de datos.
1. Asegurate que tus modelos encajen en la base de datos actual
La forma más fácil de hacerlo es tratando de crear nuevas migraciones:
python manage.py makemigrations
Si todavía tienes migraciones sin aplicar, hazlo:
python manage.py migrate
2. Elimina el historial de migraciones de cada aplicación
Debes borrarlas de una por una, corre primero showmigrations
para saber que es lo que está sucediendo con las migraciones.
python manage.py showmigrations
Resultado:
admin
[X] 0001_initial
[X] 0002_logentry_remove_auto_add
auth
[X] 0001_initial
[X] 0002_alter_permission_name_max_length
[X] 0003_alter_user_email_max_length
[X] 0004_alter_user_username_opts
[X] 0005_alter_user_last_login_null
[X] 0006_require_contenttypes_0002
[X] 0007_alter_validators_add_error_messages
contenttypes
[X] 0001_initial
[X] 0002_remove_content_type_name
my_app
[X] 0001_initial
[X] 0002_remove_mymodel_name
[X] 0003_mymodel_field
sessions
[X] 0001_initial
Limpia el historial de migraciones de todas TUS aplicaciones:
python manage.py migrate --fake my_app zero
Resultado:
Operations to perform:
Unapply all migrations: my_app
Running migrations:
Rendering model states... DONE
Unapplying my_app.0003_mymodel_field... FAKED
Unapplying my_app.0002_remove_mymodel_name... FAKED
Unapplying my_app.0001_initial... FAKED
Corre el comando showmigrations
de nuevo:
python manage.py showmigrations
Resultado:
admin
[X] 0001_initial
[X] 0002_logentry_remove_auto_add
auth
[X] 0001_initial
[X] 0002_alter_permission_name_max_length
[X] 0003_alter_user_email_max_length
[X] 0004_alter_user_username_opts
[X] 0005_alter_user_last_login_null
[X] 0006_require_contenttypes_0002
[X] 0007_alter_validators_add_error_messages
contenttypes
[X] 0001_initial
[X] 0002_remove_content_type_name
my_app
[ ] 0001_initial
[ ] 0002_remove_mymodel_name
[ ] 0003_mymodel_field
sessions
[X] 0001_initial
Debes hacer lo mismo con todas tus aplicaciones.
3. Elimina los archivos de migraciones
Ve por cada una de tus aplicaciones en el proyecto y elimina todo lo que se encuentre dentro de la carpeta de migraciones excepto por el archivo __init__.py
Si estás usando un sistema operativo tipo unix puedes correr los siguientes comandos desde el directorio principal de tu proyecto Django.
find . -path "*/migrations/*.py" -not -name "__init__.py" -delete
find . -path "*/migrations/*.pyc" -delete
Corre el comando showmigrations
de nuevo:
python manage.py showmigrations
Resultado:
admin
[X] 0001_initial
[X] 0002_logentry_remove_auto_add
auth
[X] 0001_initial
[X] 0002_alter_permission_name_max_length
[X] 0003_alter_user_email_max_length
[X] 0004_alter_user_username_opts
[X] 0005_alter_user_last_login_null
[X] 0006_require_contenttypes_0002
[X] 0007_alter_validators_add_error_messages
contenttypes
[X] 0001_initial
[X] 0002_remove_content_type_name
my_app
(no migrations)
sessions
[X] 0001_initial
4. Crea las migraciones iniciales
python manage.py makemigrations
Resultado:
Migrations for 'my_app':
0001_initial.py:
- Create model MyModel
5. Finge las migraciones iniciales
No podrás aplicar la migración debido a que los cambios ya fueron aplicados a la base de datos anteriormente. En su lugar debes fingir la aplicación de la migración:
python manage.py migrate --fake-initial
Resultado:
Operations to perform:
Apply all migrations: admin, contenttypes, auth, my_app, sessions
Running migrations:
Rendering model states... DONE
Applying my_app.0001_initial... FAKED
Corre el comando showmigrations
de nuevo:
python manage.py showmigrations
Resultado:
admin
[X] 0001_initial
[X] 0002_logentry_remove_auto_add
auth
[X] 0001_initial
[X] 0002_alter_permission_name_max_length
[X] 0003_alter_user_email_max_length
[X] 0004_alter_user_username_opts
[X] 0005_alter_user_last_login_null
[X] 0006_require_contenttypes_0002
[X] 0007_alter_validators_add_error_messages
contenttypes
[X] 0001_initial
[X] 0002_remove_content_type_name
my_app
[X] 0001_initial
sessions
[X] 0001_initial
Y listo, ya tienes el historial de migraciones limpio!
Si te quedaron dudas sobre los comandos utilizados recuerda que siempre contamos con la documentación oficial de Django respecto a las migraciones.
Si te gustó o esta información te fue de utilidad en tu proyecto no dudes en revisar mis otras publicaciones de blog, seguro encontrarás algo que te parezca interesante.