そもそもschema.rbは自分の環境次第で変わるのでrails db:migrateした時にpull してきたブランチのschemaがそのまま反映される訳ではない。
Rails db:migrateした時点で元々のschemaとは別のschemaができる。それはいい。
ただ、schema.rb をリモートブランチにpushしてはいけない。何故か?
自分のブランチをpushする時にschemaごとpushしてしまうと本番環境のschemaを変更してしまう。それはダメ。
個人個人のブランチでschemaが変わるように本番環境もまた違うから。
ではどうするか。push する際はschemaはGitの管理下から外すようにする。
やり方としては二つ。
gitignore
にファイルを追加するか、
git update-index --skip-worktree [ファイル名]
で、ファイルをコミット対象から除外する。
ちなみに、上記コマンドで除外したファイルを対象下に再度おきたい場合
git update-index --no-skip-worktree [ファイル名]
コマンドを実行すればもう一度対象下におくことができる。
新しくモデルを作成したり、カラムの追加またはそのどれかを削除する場合はどうするか?
その場合は、新しく作成したmigration ファイルだけをcommit すれば良い。そうすれば本番環境のdb環境(schema)でmigration が実行されそれまでの部分に影響を与えることがない。
そして、その反映を取り込みたい人はそれ(migrationファイル)が追加されたmasterブランチをpullした時に自分のローカル環境でmigration を実行すればまた自分の環境下(schma)でDBの変更が可能になる。