Обе команды объединяют изменения из одной ветки в другую, но делают это по-разному.
Git Merge:
Создает новый коммит слияния, сохраняя историю всех веток.
# Переключись на ветку, куда нужно влить изменения (например main).
git checkout main
# Влить изменения из ветки feature.
git merge feature
Плюсы:
- Простота использования.
- Сохраняет полную историю.
Минусы:
- Захламляет историю коммитами слияния.
Git Rebase:
Перемещает ваши коммиты в другую ветку, перезаписывая историю другой ветки таким образом, будто вы только что ответвились от этой ветки и добавили новые коммиты. Все прошлые коммиты в истории данной ветки будут до ваших коммитов.
# Переключись на feature ветку.
git checkout feature
# Перебазировать ее на main.
git rebase main
Плюсы:
- Чистая, линейная история.
- Нет лишних коммитов слияния.
Минусы:
- Может усложнить работу в команде (переписывает историю).
Когда вы делаете
rebase,
Git фактически переписывает историю коммитов - создает новые коммиты с тем же содержимым, но другим хешем.
Если вы уже запушили ветку в удаленный репозиторий, обычный
git push без
--force не сработает, потому что локальная история и на сервере расходится.
git push --force
Когда что использовать:
- Merge: для публичных веток (main, dev).
- Rebase: для локальных feature веток перед мержем.