🤖
Railsでブランチを行き来して開発していてマイグレーションに変更がある場合の対応方法
はじめに
実務で開発をしているとブランチを行き来しなければならない場合はよくあると思います。
その場合、コミットしていないファイルについてはgit stashで対応できますが、マイグレーションに変更がある場合はその対応も必要になるかと思います。
今回はそういった場合にどのように対応すればよいかを書いていきます。
前提
-
mainブランチからトピックブランチにチェックアウトして開発している - トピックブランチでマイグレーションを変更し、
rails db:migrateを実行している - その後別のトピックブランチで作業する必要があり、マイグレーションを戻したい
現在のマイグレーションの状態を確認する
まずは以下のコマンドで現在のマイグレーションの状態を確認しましょう。
rails db:migrate:status
database: sample
Status Migration ID Migration Name
--------------------------------------------------
up 20210304000000 xxxxxxx
up 20210305000000 xxxxxxx
up 20210306000000 xxxxxxx
up 20210307000000 xxxxxxx
Statusがupであればマイグレーションが実行済み、downであれば未実行です。
一番下のup 20210307000000 xxxxxxxがトピックブランチで変更したマイグレーションだとします。
マイグレーションを戻すには、一番下のup 20210307000000 xxxxxxxをdown 20210307000000 xxxxxxxにする必要があります。
マイグレーションを戻す
マイグレーションを戻すには以下のコマンドを実行します。
rails db:rollback
マイグレーションの状態を確認すると、意図した結果が得られているはずです。
rails db:migrate:status
database: hoge
Status Migration ID Migration Name
--------------------------------------------------
up 20210304000000 xxxxxxx
up 20210305000000 xxxxxxx
up 20210306000000 xxxxxxx
down 20210307000000 xxxxxxx
また、rails:db:rollbackを実行するとscheme.rbが書き換わるので、その変更を破棄、またはgit stashしてから別のトピックブランチに移動しましょう。
ちなみにSTEP=nでいくつマイグレーションを戻すか指定できます。
以下の例では一番下から3つのマイグレーションがdownになります。
rails db:rollback STEP=3
rails db:migrate:status
database: hoge
Status Migration ID Migration Name
--------------------------------------------------
up 20210304000000 xxxxxxx
down 20210305000000 xxxxxxx
down 20210306000000 xxxxxxx
down 20210307000000 xxxxxxx
おわりに
もう一度最初のトピックブランチに戻った時にはrails db:migrateを実行して、マイグレーションを元に戻せばOKです。
Discussion