If you need to selectively (for just one app) reset migrations that are taking too long, this worked for me.
rm <app-dir>/migrations/*
python manage.py schemamigration <app-name> --initial
python manage.py migrate <app-name> 0001 --fake --delete-ghost-migrations
Don’t forget to manually restore any dependencies on other apps by adding lines like depends_on = (("<other_app_name>", "0001_initial"),("<yet_another_app_name>", "0001_initial"))
to your <app-dir>/migrations/0001_initial.py
file, as the first attribute in your migration class just below class Migration(SchemaMigration):
.
You can then ./manage.py migrate <app-name> --fake --delete-ghost-migrations
on other environments, per this SO answer. Of course if you fake the delete or fake the migrate zero
you’ll need to manually delete any left-over db tables with a migration like this.
A more nuclear option is to ./manage.py migrate --fake --delete-ghost-migrations
on the live deployment server followed by a [my]sqldump. Then pipe that dump into [my]sql on the environments where you need the migrated, fully-populated db. South sacrilege, I know, but worked for me.