Опишите Git Flow, который вы использовали на проекте

Ответ

На большинстве проектов мы использовали классический 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.