🤖
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