在我的development/feature
分支机构上,我提交了20150818113106_add_team_id_to_account.rb
(向Account
添加了一列)&应用迁移所产生的schema.rb
。此提交已被推送,& origin/development/feature
也存在。
现在我想恢复此更改 - 毕竟我不想将此列添加到Account
。如果我应该恢复git提交,或者运行db:migrate:down
&提交那个或两者的结果,或两者都没有。
答案 0 :(得分:2)
您可以使用以下命令创建另一个迁移文件,该命令将删除该列。
rails g migration remove_team_id_from_accounts team_id:integer
稍后执行rake db:migrate
提交并推送到git。
答案 1 :(得分:2)
解决方案(1)
您可以运行以下命令来回滚迁移:
rake db:migrate:down VERSION=2015081811310
然后从存储库中删除迁移,如下所示:
git rm 20150818113106_add_team_id_to_account.rb
然后推送这些更改,如果在服务器上部署,请再次执行这些步骤。
解决方案(2)
创建另一个迁移以删除此列,如下所示:
rails g migration remove_team_id_from_accounts team_id:integer
然后rake db:migrate
,然后提交&按
答案 2 :(得分:2)
您在使用rails遇到了一个常见问题:
数据库状态和程序代码状态是不同的东西。
尝试将这两个概念分开。
通常使用代码可以恢复不需要的代码。
然而,您还需要更新数据库状态。
如果已经运行了迁移,则有两种选择:
使用rake db:down
撤消迁移。如果提交是最近提交的,并且刚刚运行了添加列的迁移,这可能是一个不错的选择。
使用其他迁移删除列。这可能是最干净的方法,特别是如果其他迁移不是最新的。
如果迁移已在您的数据库实例上运行 ,那么您可以只恢复代码提交,或者在更复杂的情况下进行新提交以删除代码。
关于选择哪个可能取决于迁移是否已在其他任何地方运行(除了您的本地环境)。如果已在CI中进行迁移以进行暂存,或者已经为其他已经运行它的开发人员进行了迁移,那么您可能希望选择“保留代码并添加反向迁移”。而不是在本地运行,然后尝试恢复代码提交。迁移已在其他地方运行后,您可能最好使用原始迁移,再加上另一次迁移(我将称之为向下迁移,但这不正确,这将是两次向上迁移)以删除列还原