You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

手动删除迁移文件后如何执行回滚操作?

迁移文件误删后无法回滚的解决方案

问题原因

所有主流框架的迁移工具都会在数据库中维护一张迁移执行记录表(不同框架默认表名不同:Laravel为migrations、Django为django_migrations、Rails为schema_migrations),表中按执行顺序存储了所有已运行的迁移文件名称。
你仅删除了本地的迁移文件,但数据库中对应的执行记录仍然存在。回滚操作默认会从最新的已执行迁移开始倒序匹配本地文件,因此会优先命中你已删除的迁移文件触发报错。--path参数仅限制迁移文件的扫描范围,不会跳过已记录的执行顺序校验,因此无法规避该问题。

报错信息:
migration not found: name_of_the_last_migration_I deleted_manually

解决步骤

分两种场景按需选择:

场景1:不需要保留已删除迁移对应的数据库变更

  • 首先在本地迁移文件目录下,创建和报错提示名称完全一致的空迁移文件,后缀和项目内其他迁移文件保持一致
  • 在该空迁移的回滚逻辑块(如Laravel的down()方法、Django的迁移回滚代码块)中补充对应变更的回滚逻辑,记不清具体变更也可暂时留空
  • 正常执行回滚命令即可,回滚完成后可直接删除这个临时创建的迁移文件

场景2:需要保留现有所有数据库表结构和数据,不改动线上内容

  • 直接连接项目数据库,打开上述的迁移执行记录表
  • 找到表中存储的、和你已删除的迁移文件名一致的记录,直接删除这条记录即可
  • 此时数据库中记录的最新已执行迁移,会和你本地现存的最新迁移文件自动对齐,后续执行迁移、回滚操作都不会再触发报错

注意事项

  • 操作数据库前请提前备份全量数据,避免误操作导致数据丢失
  • 后续不要直接手动删除已执行过的迁移文件,如果需要清理旧迁移,要么先执行回滚再删除文件,要么删除文件后同步删除迁移表中对应的执行记录

内容的提问来源于stack exchange,提问作者Dr.Noob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 03:18:04