Ответ
На большинстве проектов мы использовали классический Git Flow, который обеспечивает стабильность релизов и удобство параллельной разработки. Вот его ключевые элементы:
Основные ветки:
main
(илиmaster
): содержит исключительно стабильный, протестированный код, готовый к развертыванию в production. Каждый коммит в этой ветке — это новая версия продукта, помеченная тегом (например,v1.0.1
).develop
: основная ветка для разработки. В нее вливаются все завершенные функциональности (feature
) и исправления. Она содержит код для следующего релиза.
Вспомогательные ветки:
feature/*
: создаются отdevelop
для разработки новой функциональности. Название должно отражать суть задачи (например,feature/user-authentication
). После завершения вливаются обратно вdevelop
.release/*
: создаются отdevelop
, когда планируется новый релиз. В этой ветке происходит финальное тестирование, исправление мелких багов и подготовка к выпуску. После готовности вливается и вmain
, и вdevelop
.hotfix/*
: создаются отmain
для срочного исправления критических ошибок в production. После исправления вливаются и вmain
(чтобы исправить прод), и вdevelop
(чтобы исправление попало в следующий релиз).
Пример работы с новой фичей:
# 1. Создаем ветку для новой фичи от develop
git checkout -b feature/new-auth develop
# 2. Ведем разработку, делаем коммиты...
git commit -am "feat: add user registration logic"
# 3. Вливаем завершенную фичу в develop
git checkout develop
git pull origin develop
git merge --no-ff feature/new-auth # --no-ff сохраняет историю коммитов фичи
# 4. Удаляем уже ненужную ветку
git branch -d feature/new-auth
Интеграция с CI/CD:
- *Push в `feature/`**: запускает линтеры и юнит-тесты.
- Merge в
develop
: запускает все тесты и деплоит сервис наstaging
окружение. - Создание тега в
main
: запускает пайплайн для сборки релизного артефакта и деплоя наproduction
.