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 можна гортати стрілками і на клавіатурі. Щоб вийти з режиму pager, натисни q.

Маючи хеш, можна скасувати правки цього коміту. Заміни <commit> на справжній хеш у команді нижче:

Виконай у терміналі:
git revert <commit>

Git відкриє стандартний текстовий редактор і попросить написати повідомлення коміту. Можна залишити повідомлення за замовчуванням, зберегти й закрити файл.

Завдання
Виконано

Скасуй правки коміту з багом через git revert.

Чудово, баг скасовано. Тепер перевір, які зміни вніс останній коміт. Пам'ятаєш, як це зробити через

? Треба буде згадати, як на передостанній коміт.

Завдання
Виконано

Перевір різницю між двома останніми комітами.

Як бачиш, це зворотні правки до коміту, який додав баг. Ось так можна скасувати правки будь-якого коміту в репозиторії.

Май на увазі: таке скасування не завжди проходить гладко. Якщо Git не зможе застосувати зворотні правки, виникнуть конфлікти, і їх доведеться розв'язувати вручну. Якщо хочеш дізнатися більше про розв'язання конфліктів, залишайся з нами після основного курсу.

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

Проходь курс так, як він і задуманий: маленькими порціями, у сфокусованому лінійному порядку, поступово відкриваючи статті Gitopedia. Будь-коли можна продовжити зі справжнім Git у VS Code/Cursor/Antigravity/Windsurf.

Сюжетний режим
БЕЗКОШТОВНО
але потрібен вхід