Git Flow -- стратегия ветвления
Git Flow — соглашение о структуре веток в репозитории: строго определённые роли для
main,develop,feature/*,release/*,hotfix/*.
Зачем нужно
Без договорённости о ветках каждый разработчик называет и организует их по-своему — хаос. Git Flow даёт конкретные правила: где живёт стабильный код, где разработка, как создавать фичи и как выпускать релизы. Подходит для проектов с запланированными релизами (не continuous deployment).
Где используется
- Продуктовые команды с регулярными релизами (раз в 1-2 недели)
- Проекты, где нужно поддерживать несколько версий одновременно
- Enterprise-разработка с длинными циклами тестирования
Основной контент
Структура веток
main ─────────────────────────────────── (только стабильный код, теги версий)
│ ↑
└─── develop ────────────────┤──────── (интеграционная ветка)
│ ↑ │
│ feature/auth │
│ feature/cart │
│ │
└── release/1.2 ───┘
│
hotfix/1.1.1 ────────┘ (также мержится в develop)
Ветки и их роль
| Ветка | Назначение | Откуда | Куда |
|---|---|---|---|
main |
Продакшн-код с тегами | — | — |
develop |
Текущая разработка | main |
main через release |
feature/* |
Новая функциональность | develop |
develop |
release/* |
Подготовка к релизу | develop |
main + develop |
hotfix/* |
Срочный фикс в продакшне | main |
main + develop |
Пример: работа с фичей
# Начало фичи (от develop)
git switch develop
git pull origin develop
git switch -c feature/user-auth
# Разработка...
git add .
git commit -m "feat: добавить JWT авторизацию"
# Завершение фичи
git switch develop
git merge --no-ff feature/user-auth # --no-ff сохраняет merge commit
git push origin develop
git branch -d feature/user-auth
Пример: релиз
# Создание релизной ветки
git switch develop
git switch -c release/1.2.0
# Только исправления багов, обновление версии
npm version minor # или вручную в package.json
git commit -am "chore: версия 1.2.0"
# Финализация
git switch main
git merge --no-ff release/1.2.0
git tag -a v1.2.0 -m "Release 1.2.0"
git switch develop
git merge --no-ff release/1.2.0
git branch -d release/1.2.0
Пример: hotfix
git switch main
git switch -c hotfix/1.1.1
# Фикс...
git commit -am "fix: критический баг с оплатой"
git switch main
git merge --no-ff hotfix/1.1.1
git tag -a v1.1.1 -m "Hotfix 1.1.1"
git switch develop
git merge --no-ff hotfix/1.1.1
git branch -d hotfix/1.1.1
Альтернативы Git Flow
- GitHub Flow — проще: только
main+featureветки → PR → merge. Подходит для continuous deployment - Trunk-Based Development — все работают в
main, фичи за feature flags. Для зрелых команд с хорошим CI
Частые ошибки
- Мержить feature напрямую в main — минуя develop; релиз будет неполным
- Коммитить новые фичи в release-ветку — только багфиксы; новые фичи ждут следующего цикла
- Не тегировать релизы — теги в main — это версии; без них не откатиться к конкретному релизу
Связанные темы
Ресурсы
- https://nvie.com/posts/a-successful-git-branching-model/ — оригинальная статья Vincent Driessen
- https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow