Skip to main content

Що простіше відкотити: merge чи rebase?

Зазвичай простіше відкотити merge, тому що merge не переписує історію і (часто) додає один окремий merge-коміт, який легко «ревертнути».

rebase натомість переписує історію, і «відкат» частіше означає повернення гілки до старого стану/коміту, що вимагає акуратності (особливо якщо вже був push).


Чому merge простіше відкотити

Якщо merge уже закомічений

В історії з'явився окремий merge-коміт M. Його можна безпечно скасувати командою:

bash
git revert -m 1 <hash_merge_commit>
  • Git створить новий коміт, який скасує зміни, внесені merge'ем.
  • Історія залишиться цілою.
  • Це безпечно для гілок, які вже є в спільному репозиторії.

Це улюблена відповідь на співбесіді: «merge відкочується через revert».


Чому rebase складніше відкотити

Поки rebase триває

Якщо rebase зупинився на конфлікті або ти передумав, це легко:

bash
git rebase --abort

Це справді просто.

Але якщо rebase вже завершено

У тебе нові коміти з новими хешами. «Відкотити» зазвичай означає:

  • знайти, де гілка була до rebase (часто через reflog)
  • повернути гілку назад (наприклад, reset)

І тут важливо:

  • локально це нормально
  • якщо ти вже запушив rebase, доведеться робити force push, а це ризик для команди

Підсумок за ситуацією

  • Простіше відкотити merge, особливо в shared-гілках: revert безпечний і зрозумілий.
  • Простіше «скасувати» rebase, якщо він ще не завершився: rebase --abort.
  • Найскладніше - відкотити rebase після push, тому що історія вже переписана і треба діяти акуратно.

Коротке формулювання для співбесіди

Merge відкотити простіше: він зберігає історію і зазвичай скасовується через git revert (зокрема merge-коміт). Rebase переписує історію, тому відкат після завершення (і особливо після push) складніший і може вимагати reset/reflog і force push.

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.