14. Скасування комітів
Цілі
- Навчитися скасовувати коміти в локальному репозиторії.
01 Скасування комітів
Буває так, що ви робите коміт, а тоді розумієте, що допустили помилку, і хочете його скасувати. Є кілька способів вирішити цю проблему, я покажу вам найбезпечніший.
Ми скасуємо коміт шляхом створення нового коміту, що скасовує небажані зміни.
02 Змініть файл і зробіть коміт
Змініть файл hello.html
на наступний.
Файл: hello.html
<html>
<head>
</head>
<body>
<h1>Hello, World!</h1>
<!-- This is an unwanted but committed change -->
</body>
</html>
Виконайте
git add hello.html
git commit -m "Oops, we didn't want this commit"
03 Зробіть коміт з новими змінами, що скасовують попередні
Щоб скасувати коміт, нам необхідно зробити коміт, що видаляє зміни, збережені небажаним комітом.
Виконайте
git revert HEAD
Перейдіть у редактор, де ви можете відредагувати коміт-повідомлення за замовчуванням або залишити все як є. Збережіть і закрийте файл. Ви побачите:
Результат
$ git revert HEAD
[main 86364a1] Revert "Oops, we didn't want this commit"
Date: Tue Nov 28 05:51:38 2023 -0600
1 file changed, 1 deletion(-)
Через те що ми скасовували останній коміт, ми змогли використати HEAD
як посилання на коміт для скасування. Ми можемо скасувати будь-який довільний коміт в історії, вказавши його хеш.
04 Перевірте лог
Перевірка логу показує небажані та скасовані коміти у нашому репозиторії.
Виконайте
git log
Результат
$ git log
86364a1 2023-11-28 | Revert "Oops, we didn't want this commit" (HEAD -> main) [Alexander Shvets]
6a44bec 2023-11-28 | Oops, we didn't want this commit [Alexander Shvets]
b7614c1 2023-11-28 | Added HTML header (tag: v1) [Alexander Shvets]
46afaff 2023-11-28 | Added standard HTML page tags (tag: v1-beta) [Alexander Shvets]
78433de 2023-11-28 | Added h1 tag [Alexander Shvets]
5836970 2023-11-28 | Initial commit [Alexander Shvets]
Ця техніка працюватиме з будь-яким комітом (хоча, можливо, виникнуть конфлікти). Вона безпечна у використанні навіть у публічних гілках віддалених репозиторіїв.
05 Далі
Далі подивімось на техніку, яка може бути використана для видалення останніх комітів з історії репозиторія.