Ответ
Я выбираю стратегию слияния в зависимости от контекста рабочего процесса и желаемого вида истории.
1. Merge Commit (git merge --no-ff)
Это мой основной выбор для интеграции feature-веток в основную (например, main или develop). Он создает явный коммит слияния, который четко показывает, когда и какая функциональность была объединена.
git checkout main
git pull origin main # Обновить основную ветку
git merge --no-ff feature/auth # Создать merge-коммит
git push origin main
Плюсы: Сохраняет полный контекст и историю разработки фичи. Легко отменить (git revert на merge-коммит).
2. Rebase + Fast-Forward Merge (git rebase)
Я использую этот подход для поддержания линейной, чистой истории, особенно в личных проектах или когда ветка короткоживущая.
git checkout feature/auth
git rebase main # Переместить коммиты фичи на вершину main
git checkout main
git merge feature/auth # Fast-forward merge (без --no-ff)
Плюсы: История становится прямой линией без лишних merge-коммитов. Упрощает навигацию по git log.
Важно: Не используйте rebase для коммитов, которые уже были отправлены в общий репозиторий, чтобы не переписывать публичную историю.
В команде мы обычно договариваемся об одном подходе (чаще merge --no-ff) для consistency истории в основном репозитории.