Що простіше відкотити: merge чи rebase?
Зазвичай простіше відкотити merge, тому що merge не переписує історію і (часто) додає один окремий merge-коміт, який легко «ревертнути».
rebase натомість переписує історію, і «відкат» частіше означає повернення гілки до старого стану/коміту, що вимагає акуратності (особливо якщо вже був push).
Чому merge простіше відкотити
Якщо merge уже закомічений
В історії з'явився окремий merge-коміт M. Його можна безпечно скасувати командою:
git revert -m 1 <hash_merge_commit>- Git створить новий коміт, який скасує зміни, внесені merge'ем.
- Історія залишиться цілою.
- Це безпечно для гілок, які вже є в спільному репозиторії.
Це улюблена відповідь на співбесіді: «merge відкочується через revert».
Чому rebase складніше відкотити
Поки rebase триває
Якщо rebase зупинився на конфлікті або ти передумав, це легко:
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.
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.