16. Скасування комітів

Цілі

  • Навчитися скасовувати коміти до локального репозиторію.

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 --no-edit
[master 45fa96b] Revert "Oops, we didn't want this commit"
 1 files changed, 1 insertions(+), 1 deletions(-)

Так як ми скасували самий останній коміт, ми змогли використати HEAD в якості аргументу для скасування. Ми можемо скасувати будь-який довільний коміт в історії, вказавши його хеш-значення.

Примітка: Команду --no-edit можна проігнорувати. Вона була необхідна для генерації вихідних даних без відкриття редактора.

04 Перевірте лог

Перевірка логу показує небажані та скасовані коміти до нашого репозиторію.

Виконайте:

git hist

Результат:

$ git hist
* 45fa96b 2011-03-09 | Revert "Oops, we didn't want this commit" (HEAD, master) [Alexander Shvets]
* 846b90c 2011-03-09 | Oops, we didn't want this commit [Alexander Shvets]
* fa3c141 2011-03-09 | Added HTML header (v1) [Alexander Shvets]
* 8c32287 2011-03-09 | Added standard HTML page tags (v1-beta) [Alexander Shvets]
* 43628f7 2011-03-09 | Added h1 tag [Alexander Shvets]
* 911e8c9 2011-03-09 | First Commit [Alexander Shvets]

Ця техніка працюватиме з будь-яким комітом (хоча, можливо, виникнуть конфлікти). Вона безпечна у використанні навіть у публічних гілках віддалених репозиторіїв.

05 Далі

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