либо следуя этому правилу, надо обеспечить, чтобы старый код работал на базе с накаченными миграциями. тогда их откатывать не придется.
Да, делать миграции так, чтобы работал и старый код, и новый. Тогда откатывать не придётся.
Например, если надо переименовать поле, то вместо RENAME колонки мы первой миграцией делаем ADD + UPDATE и вешаем триггер для синхронизации новой колонки со старой. И теперь деплоим новый код.
В итоге старый код продолжает работать со старой колонкой, а новый уже пробует работать с новой.
А потом через неделю когда всё новое точно работает спокойно делаем DROP старого поля и триггера.