← Назад к вопросам

Что такое классический git flow?

1.0 Junior🔥 121 комментариев
#Инструменты и DevOps

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Git Flow: классический workflow

Что такое Git Flow

Git Flow — это популярная модель организации веток (branching model) в git, разработанная Vincent Driessen. Она определяет структуру веток и процесс объединения кода для упорядоченной разработки, особенно в больших команднах. Git Flow идеально подходит для проектов с регулярными релизами.

Основные ветки Git Flow

мастер (main/master) ← Всегда готов к production
    ↑
    ├── release-1.0 ← Подготовка к релизу
    ├── hotfix-1.0.1 ← Срочные патчи в production
    ↑
разработка (develop) ← Интеграционная ветка
    ↑
    ├── feature/user-auth ← Новая функция
    ├── feature/payment ← Новая функция
    └── feature/notifications ← Новая функция

Ветка Master

# master (или main в новых repo) — только ready-for-production код
# Каждый коммит в master = потенциальный релиз

# Создание тега для версии
git tag -a v1.0.0 -m "Release version 1.0.0"
git push origin v1.0.0

# Только merge commits из release или hotfix веток
# Изменения в master ТОЛЬКО через pull requests

Ветка Develop

# develop — главная ветка разработки (integration branch)
# Содержит latest development changes

# Создаётся один раз из master
git checkout -b develop master
git push -u origin develop

# Служит базой для всех feature веток
# Периодически merge-ится в master для релизов

Feature Ветки

# feature/* — ветки для новых функций и fixes
# Создаются из develop, merge-ятся обратно в develop

# Создание feature ветки
git checkout -b feature/user-authentication develop

# Разработка
git add .
git commit -m "Add user login endpoint"
git commit -m "Add password validation"

# Отправка на сервер
git push -u origin feature/user-authentication

# Когда готово — создаём Pull Request в develop
# После review и approval — merge в develop

# Удаление после merge
git branch -d feature/user-authentication
git push origin --delete feature/user-authentication

# Соглашение о именовании
feature/user-auth
feature/payment-system
feature/api-v2
bugfix/search-not-working
improvement/performance-optimization

Release Ветки

# release/* — подготовка к релизу (freeze на develop)
# Создаётся когда develop готов к production

# Создание
git checkout -b release-1.0.0 develop

# В release ветке:
# - Обновить версию в package.json
# - Обновить CHANGELOG
# - Исправить только багии в production (НЕ новые функции)
# - Компилировать build файлы

git commit -am "Bump version to 1.0.0"
git commit -am "Update CHANGELOG for 1.0.0"

# Когда готово — merge в обе ветки: master и develop

# Merge в master
git checkout master
git merge --no-ff release-1.0.0 -m "Merge release-1.0.0 into master"
git tag -a v1.0.0 -m "Release 1.0.0"

# Merge в develop (чтобы версия была актуальна там)
git checkout develop
git merge --no-ff release-1.0.0 -m "Merge release-1.0.0 into develop"

# Удаление release ветки
git branch -d release-1.0.0

Hotfix Ветки

# hotfix/* — срочные патчи для production (из master)
# Используется для критических багов в production

# Создание из master (НЕ из develop!)
git checkout -b hotfix/critical-bug master

# Исправление
git commit -am "Fix critical security vulnerability"

# Merge в обе ветки: master и develop

# В master
git checkout master
git merge --no-ff hotfix/critical-bug -m "Merge critical bug fix"
git tag -a v1.0.1 -m "Hotfix 1.0.1"

# В develop
git checkout develop
git merge --no-ff hotfix/critical-bug -m "Merge critical bug fix into develop"

# Удаление
git branch -d hotfix/critical-bug

Полный пример Git Flow

# 1. Инициализация проекта
git clone https://github.com/company/project.git
git checkout develop

# 2. Разработчик начинает работу над функцией
git checkout -b feature/user-profile develop
git add src/components/UserProfile.jsx
git commit -m "Add user profile component"
git commit -m "Add profile edit form"
git push origin feature/user-profile

# 3. Pull Request → Code Review → Approved
# (в GitHub/GitLab/Bitbucket)

# 4. Merge в develop
git checkout develop
git pull origin develop
git merge --no-ff feature/user-profile
git push origin develop

# 5. Когда накопилось достаточно функций → Подготовка релиза
git checkout -b release-2.0.0 develop
echo '2.0.0' > version.txt
git commit -am "Bump to version 2.0.0"
git push origin release-2.0.0

# 6. Release merge
git checkout master && git pull
git merge --no-ff release-2.0.0
git tag -a v2.0.0 -m "Release 2.0.0"
git push origin master --tags

git checkout develop && git pull
git merge --no-ff release-2.0.0
git push origin develop

# 7. Deploy v2.0.0 на production
# (CI/CD pipeline срабатывает на git push origin master --tags)

Плюсы Git Flow

✅ Чёткая структура веток — понятно кто что делает
✅ Параллельная разработка — несколько feature веток одновременно
✅ Контроль релизов — release ветки для заморозки
✅ Быстрые патчи — hotfix без влияния на develop
✅ История ясная — --no-ff merge сохраняет структуру
✅ Подходит для больших команд

Минусы Git Flow

❌ Сложный для начинающих
❌ Много веток — можно запутаться
❌ Медленные CI/CD (много веток для проверки)
❌ Избыточен для маленьких команд
❌ Release ветки требуют дополнительной синхронизации

Git Flow vs GitHub Flow

┌─────────────────┬──────────────┬─────────────────┐
│ Характеристика  │  Git Flow    │  GitHub Flow    │
├─────────────────┼──────────────┼─────────────────┤
│ Сложность       │ Сложный      │ Простой         │
│ Ветки           │ Много        │ Мало (feature)  │
│ Релизы          │ Планомерные  │ Continuous      │
│ Команда         │ Большая      │ Маленькая       │
│ Подходит для    │ Версионное ПО│ SaaS / Web      │
└─────────────────┴──────────────┴─────────────────┘

GitHub Flow (упрощённый вариант)

# GitHub Flow — 2 ветки вместо 6

# main — production
# feature/* — всё остальное

# Вместо multiple releases — continuous deployment
git checkout -b feature/new-feature main
git push origin feature/new-feature
# → Pull Request → Review → Merge → Deploy

Инструменты для Git Flow

# git-flow — расширение для git
sudo apt install git-flow  # Linux
brew install git-flow      # macOS

# Упрощённый workflow
git flow feature start user-auth
# = git checkout -b feature/user-auth develop

git flow feature finish user-auth
# = git checkout develop && git merge --no-ff feature/user-auth

# Но многие предпочитают делать вручную для контроля

Выводы

  1. Git Flow — классическая модель для версионного ПО
  2. Структура: master → release → develop → feature
  3. Merge требует --no-ff чтобы сохранять историю веток
  4. Подходит для команд 5+ человек с регулярными релизами
  5. Для SaaS/Web лучше GitHub Flow или Trunk-Based Development
  6. Главное правило: develop = source of truth, master = production
Что такое классический git flow? | PrepBro