Обе команды объединяют изменения из одной ветки в другую, но делают это по-разному.
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 веток перед мержем.
➡️ Flutter & Dart | Мобильный трудоголик