Возвращаясь к предыдущему git commit - PullRequest
0 голосов
/ 09 мая 2018

Я новичок в Ruby on Rails и, наконец, начинаю изучать git.

Я пытаюсь следовать учебнику, но наткнулся на загадку и случайно вышел из строя. Так что теперь, когда я пытаюсь сделать "rails db: migrate", я получаю сообщения об ошибках, что столбцы уже существуют, и я не могу продолжить учебник.

В последний раз, когда я запускал «git commit» для своей ветки, приложение было стабильным.

Я бы хотел, чтобы локальная версия моего приложения вернулась к последней версии, которую я добавил в git.

Я не делал этого раньше, как это можно сделать? Я просмотрел документацию по git, но, будучи новичком в этом, это довольно запутанно, и я не хочу ничего портить.

Ответы [ 4 ]

0 голосов
/ 10 мая 2018

Похоже, вы запустили миграцию в своей базе данных, которая создала столбец, о котором вы получаете сообщение об ошибке.
Скорее всего, вы запустили миграцию, но не произвели откат и извлекли фиксацию до того, как сгенерировали миграцию.

Если это ваш случай, то возврат к предыдущей фиксации будет иметь ту же ошибку, так как ваша база данных неисправна.

Чтобы это исправить, вам нужно вручную удалить столбец и снова запустить миграцию.

После запуска миграции ваши файлы schema_migration будут содержать самую последнюю миграцию, и это должно исправить ее на будущее (вроде).

0 голосов
/ 09 мая 2018

Для перемещения по дереву git вы используете команду git checkout <branch>. Вы можете проверить хеш для предыдущей команды, используя git log. Вы можете использовать это, чтобы перейти к предыдущему коммиту.

0 голосов
/ 09 мая 2018

Вам, вероятно, не нужно откатываться к предыдущему коммиту. Просто обновите файл миграции, чтобы использовать директивы table_exists? и / или column_exists?.

Если вы создаете совершенно новую таблицу, она будет использоваться следующим образом:

class CreateSomeCoolThings < ActiveRecord::Migration
  def up
    unless table_exists?(:some_cool_things)
      create_table :some_cool_things do |t|
        ...
      end
    end
  end

  def down
    if table_exists?(:some_cool_things)
      drop_table :some_cool_things
    end
  end
end

И если вы просто добавляете новые столбцы в существующую таблицу, вы можете сделать это:

class AddSomeAttributeToWhatevers < ActiveRecord::Migration
  def up
    add_column :whatevers, :some_attribute, :string unless column_exists? :whatevers, :some_attribute
  end

  def down
    remove_column :whatevers, :some_attribute if column_exists? :whatevers, :some_attribute
  end
end

Безопасная защита ваших миграций таким способом - это просто хорошая практика, чтобы привыкнуть в любом случае.

0 голосов
/ 09 мая 2018

Насколько осторожны ваши операции фиксации, иногда вы могли включать файлы, которые вы забыли включить в ваш коммит, или случайно включили их, или вы могли предоставить неполную информацию в сообщении фиксации. В этом случае вы можете использовать команду git commit с параметром - изменить на re-commit вашего последнего коммита. Если вы просто хотите изменить сообщение о коммите, вы можете запустить git commit с опцией mend -m . Если вы хотите добавить или удалить файлы из последнего коммита, вы можете сначала выполнить подготовку с помощью команд git add и git rm , упомянутых ранее в разделе фиксации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...