6. История

Откат старых коммитов

Итак, мы разобрались, как просматривать историю репозитория и сравнивать коммиты.

А что, если мы нашли ошибку в коммите, который был сделан какое-то время назад? Как отменить изменения из этого конкретного коммита?

Давай выясним

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

В Git любой предыдущий коммит можно откатить с помощью команды

, указав хеш нужного коммита. Учти: эта команда не удаляет старый коммит, а создаёт новый с обратными правками. Лишний коммит может выглядеть странно, но это помогает сохранить историю цельной и последовательной. В конце концов, вдруг позже выяснится, что отменённые правки всё-таки были правильными?

Логично

Давай попрактикуемся. Для начала добавим ошибку в наш код.

Файл: hello.html
<html>
    <head>
        <link rel="stylesheet" href="style.css"/>
    </head>
    <body>
        <h1>Hello, World!</h1>
        <p>This is a bug!</p>
    </body>
</html>
Задача
Пройдено

Добавь строку <p>This is a bug!</p> в hello.html, подготовь и закоммить изменения с сообщением Introduced a bug.

Отлично! Прямо сейчас мы ещё могли бы отменить изменения с помощью git commit --amend. Но что, если ошибка обнаружится слишком поздно? Давай сделаем ещё один нормальный коммит, а потом посмотрим, как откатить предыдущий, в котором затесались нежелательные изменения.

Файл: hello.html
<!DOCTYPE html>
<html>
    <head>
        <link rel="stylesheet" href="style.css"/>
    </head>
    <body>
        <h1>Hello, World!</h1>
        <p>This is a bug!</p>
    </body>
</html>
Задача
Пройдено

Добавь строку <!DOCTYPE html> в hello.html, подготовь и закоммить изменения с сообщением Added HTML5 doctype.

Теперь нужно узнать хеш коммита, который добавил ошибку. Запусти git log, чтобы его найти.

Задача
Пройдено

Выполни git log и найди хеш того самого коммита с ошибкой.

Подсказка: Вывод git log можно прокручивать стрелками и . Чтобы выйти из режима постраничного вывода, нажми q.

Зная хеш, мы можем откатить изменения этого коммита. Замени <commit> на реальный хеш в следующей команде:

Запустить в терминале:
git revert <commit>

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

Задача
Пройдено

Откати коммит, который добавил ошибку, с помощью команды git revert.

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

? Понадобится вспомнить, как на коммит перед последним.

Задача
Пройдено

Проверь разницу между двумя последними коммитами.

Как видишь, это ровно обратные правки к коммиту с ошибкой. Вот так можно откатить любой коммит в репозитории.

Имей в виду, что такой способ отката не идеален: если Git не сможет применить обратные изменения, может возникнуть конфликт слияния. В таком случае его придётся разрешать вручную. До разрешения конфликтов мы дойдём после основного курса.

Next step
Хочешь попробовать Сюжетный режим?

Пройди курс так, как задумано: порционное обучение, чёткий порядок и постепенное открытие статей в Gitопедии. В любой момент можно продолжить работу с настоящим Git прямо в VS Code, Cursor, Antigravity или Windsurf.

Сюжетный режим
БЕСПЛАТНО
(требуется войти в аккаунт)