Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Скасування Конкретного Комміту | Скасування Змін
Основи Git
course content

Зміст курсу

Основи Git

Основи Git

Скасування Конкретного Комміту

git revert

Як ми вже згадували, для скасування конкретного комміту використовується команда git revert. Ця команда створює новий комміт, який скасовує зміни, внесені вказаним коммітом. Базовий синтаксис наступний:

Як ви бачите, замість того, щоб використовувати HEAD, як ми робили для скасування останнього комміту, тепер ми повинні вказати hash конкретного комміту (commit ID), який ми хочемо скасувати (замініть <commit-hash> на дійсний хеш).

Детальніше про Хеші

Пам'ятайте, що кожен комміт має свій унікальний ідентифікатор, який по суті є рядком цифр (0-9) і букв (a-f), шістнадцятковим рядком. Цей 40-символьний рядок називається хешом. Давайте подивимось на наш останній комміт:

Ось його хеш:

1b00736255dca7d78659a9971d0c30fba0eb3075

Примітка

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

Хеш комміту обчислюється за допомогою алгоритму SHA-1 на основі наступної інформації:

  • повідомлення комміту;
  • дата;
  • автор;
  • знімок робочого дерева;
  • хеш батьківського комміту (або коммітів, якщо їх більше одного).

Якщо комміт є першим у репозиторії, то хеш батьківського комміту, очевидно, не обчислюється.

Оскільки вся ця інформація про комміт використовується для обчислення його хешу, використання хешів як ідентифікаторів коммітів забезпечує узгодженість репозиторію. Крім того, ймовірність того, що два різних комміти матимуть однаковий хеш (ймовірність колізії), є надзвичайно низькою, тому це дуже малоймовірно, щоб сталося випадково.

По суті, якщо щось змінюється в комміті, то змінюється і його хеш. Це означає, що якщо дані з якихось причин будуть зіпсовані, Git може використати хеш, щоб виявити це.

Примітка

При внесенні змін до комміту змінюється ідентифікатор комміту, тому краще не використовувати команду git commit --amend при роботі з віддаленими репозиторіями.

Приклад Сценарію

Перш ніж ми вирішимо, який саме комміт повертати, давайте подивимося на чотири останні комміти:

Ми бачимо, що існує комміт, до якого ми додали файл recipe.txt. Давайте *скасуємо цей комміт, створивши новий комміт, який скасує ці зміни і, по суті, видалить файл. У моєму випадку його хеш буде наступним:

043b634d76a7a7744757350512b6367417c29e0

Ваш хеш для цього комміту, однак, буде іншим. Тепер ми можемо скасувати цей комміт:

Замініть цей хеш своїм хешем.

Знову відкривається текстовий редактор за замовчуванням з повідомленням комміту за замовчуванням для скасування. Ми залишимо все як є.

Далі ми закриємо текстовий редактор належним чином і покажемо зміни, зроблені в цьому останньому комміті:

Відбулося 7 видалень, що означає, що всі 7 рядків файлу було видалено. Тепер перевіримо, чи було видалено сам файл, перелічивши усі неприховані файли і директорії у директорії нашого проєкту:

Вітаємо! Ми успішно видалили файл recipe.txt.

Все було зрозуміло?

Секція 3. Розділ 5
We're sorry to hear that something went wrong. What happened?
some-alt