Site icon IT Education Center Blog – блог навчального центру DevOps – ITEDU by NETFORCE Group

Скасування комітів у Git: розбори reset, revert і rebase

Перш ніж застосовувати складні команди скасування, дайте відповідь на запитання: вам справді потрібно видаляти коміт у Git, чи ви просто забули щось додати?

Якщо ви щойно зробили коміт, але забули внести правку або допустили друкарську помилку в повідомленні, скористайтеся прапорцем --amend:

git commit --amend

Ця команда дозволяє змінити останній коміт, додавши до нього нові деталі або змінивши його назву, без створення зайвих сутностей в історії. 

Якщо коміт все ж потрібно видалити — гортайте нижче.

Як скасувати останній локальний комміт у Git

Якщо ви створили коміт локально на своєму комп’ютері й ще не відправляли його у віддалений репозиторій, найкращим вибором буде команда git reset.

Вона повертає стан вашої поточної гілки на один або кілька комітів назад.

1. Зберегти зміни підготовленими до коміту

Якщо ви хочете скасувати сам коміт, але залишити всі внесені зміни у зоні підготовки:

git reset --soft HEAD~1

Git відкочує історію на 1 коміт назад (HEAD~1), але ваші зміни залишаються відміченими. Ви можете відредагувати код і зробити новий коміт.

2. Залишити зміни в робочій папці

Якщо ви хочете скасувати коміт і скинути статус підготовки змін, але залишити сам код у файлах:

git reset HEAD~1

Зміни залишаться у вашому проєкті, але матимуть статус непідготовлених.

3. Повністю видалити зміни

Якщо коміт був повністю помилковим і ви хочете безповоротно видалити і сам коміт, і всі внесені зміни в коді:

git reset --hard HEAD~1

Важливо: Режим --hard видаляє всі зміни без можливості відновлення! Переконайтеся, що цей код вам точно більше не потрібен. 

Повернення до будь-якого давнього коміту 

За допомогою git reset можна відкотитися не лише на один крок, а й до будь-якого конкретного коміту в минулому. Для цього замість HEAD~1 вкажіть хеш потрібного коміту: 

git reset --hard 0ad5a7a6

Це скасує всі коміти, які були створені після вказаного хешу (0ad5a7a6).

Безпечне скасування публічних комітів 

Що робити, якщо коміт уже відправлено у віддалений репозиторій і з цією гілкою працюють інші розробники?

Використовувати git reset у такому разі небезпечно, оскільки це перепише спільну історію та створить конфлікти у вашої команди.

Для вже опублікованих комітів використовують команду git revert.

Замість видалення старого коміту, git revert створює новий коміт, який вносить протилежні зміни (фактично дзеркально скасовує дію потрібного коміту).

git revert 0ad5a7a6

Корисні прапорці для git revert 

git revert a72ef02 --no-commit
git revert a72ef02 --no-edit

Видалення точкового коміту з середини історії 

Якщо потрібно вирізати один конкретний коміт із середини історії, не зачіпаючи ті, що були створені після нього, використовують інтерактивний ребейз — git rebase -i.

  1. Запустіть інтерактивний ребейз для потрібної кількості останніх комітів (наприклад, N останніх комітів):
git rebase -i HEAD~N
  1. У текстовому редакторі, що відкриється, ви побачите список комітів.
  2. Знайдіть рядок із комітом, який потрібно видалити, і замініть слово pick на drop.
  3. Збережіть і закрийте редактор.

Підсумок: що і коли обрати?

Exit mobile version