Скасування змін зі старих комітів
Отже, ми розібрали, як переглядати історію репозиторію та порівнювати зміни між комітами.
А що робити, коли помилка знайшлася в коміті, зробленому давненько? Як скасувати зміни з того коміту?
Найпростіший спосіб скасувати зміни — вручну внести зворотні правки й закомітити їх. Але що, як зміни складні й лізти в них руками не хочеться?
В Git можна скасувати правки будь-якого коміту командою , вказавши хеш потрібного коміту. Зверни увагу: ця команда не видаляє коміт, а створює новий — зі зворотними правками. Додатковий коміт може здатися зайвим, але так історія залишається цілісною. Зрештою, а раптом виявиться, що скасовані зміни насправді були правильними?
Потренуймося. Спершу додамо в код «баг».
<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. Але що, як помилку помітиш надто пізно? Зробімо ще один нормальний коміт, а потім я покажу, як скасувати попередній — той, що з небажаними змінами.
<!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 не зможе застосувати зворотні правки, виникнуть конфлікти, і їх доведеться розв'язувати вручну. Якщо хочеш дізнатися більше про розв'язання конфліктів, залишайся з нами після основного курсу.
Проходь курс так, як він і задуманий: маленькими порціями, у сфокусованому лінійному порядку, поступово відкриваючи статті Gitopedia. Будь-коли можна продовжити зі справжнім Git у VS Code/Cursor/Antigravity/Windsurf.
але потрібен вхід