← Все вопросы

Чем git merge отличается от git rebase простыми словами?

Задан 20 месяцев назад1.5к просмотров2 ответа
14

Постоянно слышу про merge и rebase, но не понимаю разницу. Когда что использовать? Объясните по-человечески, чем отличается git merge от git rebase и что выбрать новичку.

2 ответа

15
✓ Принятый ответ — помог автору

Обе команды объединяют изменения из одной ветки в другую, но по-разному формируют историю.

git merge берёт две ветки и создаёт новый «коммит слияния», который связывает их. История сохраняется как есть — видно, что была отдельная ветка, и где её влили.

git checkout main
git merge feature

История получается с «развилками» — честная, но местами ветвистая.

git rebase «переносит» твои коммиты так, будто ты делал их поверх свежего main. Развилка исчезает — история становится линейной, как одна прямая.

git checkout feature
git rebase main

Аналогия: merge — это как сшить две тропинки мостиком в точке встречи. Rebase — как взять свою тропинку и переложить её начало в конец главной дороги, чтобы получилась одна прямая.

Что выбрать новичку: для общих веток (main, develop) безопаснее merge — он не переписывает историю. Rebase удобен, чтобы причесать свою личную ветку перед вливанием.

Главное правило (и частая ошибка): никогда не делай rebase на ветке, которую уже запушили и которую тянут другие. Rebase меняет хеши коммитов, и у коллег история разъедется, начнутся конфликты при pull. Rebase — только для своих, ещё не расшаренных коммитов.

6

Коротко:

  • merge — сохраняет историю как было, добавляет merge-коммит, история ветвистая, но безопасная.
  • rebase — переписывает коммиты, история линейная и чистая, но хеши меняются.

Правило: rebase только для своих локальных веток до пуша. Общие ветки сливай через merge. Когда сомневаешься — выбирай merge, он прощает ошибки.

Ваш ответ

Войдите, чтобы ответить на вопрос.