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

Не буду приводить полный исходник. Скажу лишь то, что там написанная когда-то давно форма обратной связи с одного уже мёртвого сайта.
Итак, у нас возможны несколько вариантов развития событий, когда мы хотим откатить изменения в файлах проекта:
- коммита ещё не было;
- коммит уже произведён;
Откат изменений проекта без commit
Модифицируем адрес электронной почты в исходнике и откроем окно Smartgit:

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

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


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

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