Как перебазировать вашу ветку мастером, у которого есть новые миграции схемы? Рельсы
У меня есть ветка, схема которой отличается от схемы моего мастера. Когда я пытаюсь сделать ребаз с мастером, я получаю ошибку конфликта слияния со схемами. Я понимаю, что это происходит потому, что моя схема на моей ветке отличается от схемы на моем хозяине. Это потому, что я работал над чем-то другим в другой ветке и должен был выполнить миграцию. Затем я объединил эту ветку со своим хозяином. Так что теперь у моего мастера есть новая таблица в схеме, над которой ветка, над которой я работаю, понятия не имеет. Поэтому, когда я пытаюсь сделать ребаз с мастером, возникает ошибка конфликта. Есть ли способ, чтобы ветвь автоматически сливалась и брала последнюю схему с мастера, когда я перебазировала? Я знаю, что есть фрагмент кода, который я могу поместить в свой конфигурационный файл и вызвать его в моем файле атрибутов, однако это решение, похоже, не работает для меня, так как мои миграции были сделаны до того, как я поместил этот код в конфигурационный файл.
3 ответа
Удалите файл схемы, примените миграцию, если таковые имеются на этом этапе ребазирования, сбросьте новую схему rails и git rebase --continue
, Повторите при необходимости.
Если schema.rb
(или любой файл в этом отношении) изменился, так как вы создали свою ветвь, тогда вам придется вручную объединить конфликт.
Конфликт возникает только тогда, когда в файле из обеих ветвей появляются новые изменения с одинаковыми номерами строк.
Выполнение ниже, как упомянуто в другом ответе, заставит вас потерять изменения, сделанные в вашей текущей ветке:
git rebase -Xtheirs the_branch_name
В случае schema.rb
обычно строка номера версии вызывает конфликт. Вы всегда должны указывать большее количество двух версий:
ActiveRecord::Schema.define(version: 2017081234567)
Поскольку schema.rb генерируется автоматически после каждой миграции, самый простой способ разрешить конфликт - это удалить этот файл, запустить
rake db:drop db:create db:migrate
и зафиксируйте изменения.