Какой метод слияния веток в Git ты используешь?

«Какой метод слияния веток в Git ты используешь?» — вопрос из категории DevOps, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Я выбираю стратегию слияния в зависимости от контекста рабочего процесса и желаемого вида истории.

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 истории в основном репозитории.