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 Далі

Далі подивімось на техніку, яка може бути використана для видалення останніх комітів з історії репозиторія.