所以,我有一个我正在试验的应用程序。
当前状态在我的develop
分支上很好。我想安装spree,但随之而来的是db的许多迁移和更改。
所以我根据我的develop
分支为Spree创建了一个新的分支。
我安装了gem,运行了迁移,以及所有这些。
但是,我搞砸了一些东西,所以我想恢复到我的develop
分支并删除了spree
分支。
我认为我的schema.rb
会恢复正常,我的数据库也会恢复正常。
然后我查看我的Schema.rb
,我看到很多Spree表。
不仅如此,我还看到Schema.rb
中的其他表格,我知道我已在spree
分支中创建了一个迁移并“删除”。
因此,例如,我在orders
中有一个Schema.rb
表,我知道该表应该被删除。有点困惑,我决定创建一个新的迁移来删除orders
表以及我在安装spree之前删除的其他表,并且我得到PG错误,表示该表不存在。
所以....现在看来,我的schema.rb和DB没有同步。
更糟糕的是,我的schema.rb和我的db/migrate
文件夹没有同步。
我打算手工删除schema.rb中的create_table
语句,用于那些不应该存在的表 - 但是这一切都很乱。
我如何从这个洞中挖掘自己,以后如何防止它?
DB
前狂欢状态
狂欢状态
疯狂后状态
基本上与狂欢状态
相同数据库/迁移文件夹
前狂欢状态
狂欢状态
疯狂后状态
请注意,“Post-Spree State”的迁移不会与“Post-Spree State”的DB状态同步。
答案 0 :(得分:1)
将评论转换为答案,因为它变得非常冗长:
为任何新分支建立单独的数据库更安全,即使它只是开发数据库的快照。您需要从狂欢分支恢复迁移(如果可能)并向下运行以使数据库返回到您拥有它的位置。
rake db:migrate VERSION=xxx
xxx
等于狂欢前最后一次迁移的数量
我不是git专家,但是如果你的分支是通过git删除的话,那么这个帖子可以帮助你恢复它。如果您只在本地删除它,那么您应该可以再次检查它。
答案 1 :(得分:1)
当您切换回develop
分支时,git应该检查您的原始schema.rb
(如果这还没有发生,我认为您应该重新检查git命令“#in}'使用)。但是,赢了会自动使您的数据库与创建spree
时的位置保持一致。
如果您不再拥有所需的迁移文件以将您的数据库状态恢复为与您要退出git的提交相对应的状态,则应使用rake db:reset
来使其匹配。这将转储数据库的当前状态并使用schema.rb
重建它(然后应用相应的种子文件)。