В чём разница между 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-ветке.