Материал просмотрен 88 раз(а)

Всем привет! Мы продолжаем работать с Git. Сейчас мы поговорим о таком частом явлении среди программистов, как ошибочный полёт мысли. Ну то есть когда написали некую ерунду в коде.

Я немного допишу исходный файл, чтобы было нагляднее.

Исходный файл

Исходный файл

Не буду приводить полный исходник. Скажу лишь то, что там написанная когда-то давно форма обратной связи с одного уже мёртвого сайта.

Итак, у нас возможны несколько вариантов развития событий, когда мы хотим откатить изменения в файлах проекта:

  • коммита ещё не было;
  • коммит уже произведён;

Откат изменений проекта без commit

Модифицируем адрес электронной почты в исходнике и откроем окно Smartgit:

Внесены изменения

Внесены изменения

Как видим, я изменил адрес электронной почты. Предположим, что мы поняли, что адрес не тот. Отменить изменения файла можно кнопкой Discard:

g4

После нажатия кнопки Discard все изменения файлов будут утрачены. Мы вернёмся к последней закоммиченой версии файла.

Откат изменений после commit

Ну а теперь представим ситуацию, мы ошибочно внесли изменения в проект и ещё и закоммитили его! Для примера я вообще удалил строку $to = …. из кода. Сэкономил, так сказать, несколько байт. Ну и нажал коммит. А потом одумался! А что же делать?! Как вернуть старую версию файла? А то вдруг всё перестало работать.

В окне на панели инструментов ищем кнопку “Log”, которая покажет нам всё “дерево” разработки.

Откат после коммита

Откат после коммита

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

Если хотим отменить эти действия, нажимаем кнопку Revert на панели инструментов.

Перекоммичиваем

Перекоммичиваем

 

Отмена прошлых изменений в новом коммите

Отмена прошлых изменений в новом коммите

При этом у нас не убивается предыдущий коммит, а создаётся новый, реверсирующий прошлые изменения.

Но если же мы хотим вернуть всё наше дерево на какой-то определённый шаг (3 коммита назад), например, если мы поняли, что какое-то глобальное изменение проекта было напрасным. То выбираем нужный коммит и жмём кнопку Reset. Проект возвращается в то состояние, в котором был на момент выбранного коммита.

 

Ресет коммита

Ресет коммита

Кстати, обратите внимание, что в дереве коммитов есть два цвета – синий и желтый. Синим показаны коммиты, отмеченные в глобальном репозитории (для которых был сделан push), а желтые – те, которые сделаны локально.

Ну чтож, надеюсь, мы научились делать откаты изменений и можно идти дальше!