У чому різниця між git merge та git rebase?
Merge та rebase — два способи об'єднати зміни з однієї гілки в іншу, але вони працюють по-різному.
git merge створює новий merge-коміт, який об'єднує історії обох гілок. Історія зберігається повністю — видно, яка гілка коли відокремлювалася і об'єднувалася. Це безпечно для спільних гілок, тому що не переписує історію. Недолік — історія може стати заплутаною з безліччю merge-комітів, особливо у великих командах. Використовуйте merge, коли об'єднуєте feature-гілку в main або коли працюєте з публічними репозиторіями.
git rebase переносить ваші коміти поверх цільової гілки, створюючи лінійну історію. Git бере ваші коміти, скасовує їх, оновлює гілку до цільового стану, і застосовує ваші коміти знову. Історія виглядає чистою і прямою, без merge-комітів. Недолік — rebase переписує історію, що небезпечно для спільних гілок: якщо хтось уже зробив pull вашої гілки, після rebase їхня історія не збігеться з вашою. Використовуйте rebase для локальних feature-гілок перед merge в main.
Головне правило: ніколи не робіть rebase публічних гілок (main, develop, або гілок, на які посилаються інші розробники). Якщо гілка вже надіслана в remote і хтось може на ній працювати — використовуйте merge.
Багато команд використовують гібридний підхід: rebase feature-гілки перед merge, потім merge в main з --no-ff (no fast-forward) для збереження точки злиття. Це дає чисту історію комітів і при цьому видно, які коміти належали feature-гілці.