Продвинутый Git
1rebase: линейная история2stash: прячем незавершённую работу3git reset и git revert: отмена изменений4cherry-pick: перенос конкретных коммитов5tags: версионирование релизов6Git Workflows: GitFlow, GitHub Flow, Trunk-based← вы здесь
📖 Полная статья по теме →
Урок 6~12 минут

Git Workflows: GitFlow, GitHub Flow, Trunk-based

Сам Git не диктует как организовать ветки. Команды придумали несколько подходов. Разберём три самых распространённых.

GitFlow

Придуман Винсентом Дриссеном в 2010-м. Подходит для продуктов с чёткими версиями и редкими релизами.

Постоянные ветки:

  • main — только стабильные релизы с тегами
  • develop — основная разработка, интеграция фич

Временные ветки:

  • feature/* — новые функции (отходят от develop)
  • release/* — подготовка релиза (тестирование, bugfix)
  • hotfix/* — срочный фикс прямо в main
main:     ●────────────────────●──────────●
           \                  / hotfix   /
develop:   ●──●──●──●────────●──────────●
               \   \        /
feature:        ●───●   release
                         ●──●

Плюсы: чёткая структура, параллельные релизы, изоляция фич
Минусы: сложно, много веток, долгий цикл доставки
Когда: библиотеки, мобильные приложения с App Store, enterprise с релиз-циклами

GitHub Flow

Упрощённый вариант. Только две концепции: main и feature-ветки через PR.

main:    ●───────────────────────────●──────●
          \           PR merged      /       \  PR
feature:   ●──●──●──●──────────────      ●──●

Процесс:

  1. Создай ветку от main
  2. Делай коммиты
  3. Открой Pull Request
  4. Код ревью
  5. Merge в main → деплой

Плюсы: простота, быстрая доставка, хорошо для CI/CD
Минусы: нет явного разделения релизов, main должна быть всегда готова к деплою
Когда: веб-приложения, SaaS, команды с CI/CD

Trunk-based Development

Все разработчики коммитят в main (trunk) напрямую или через короткоживущие ветки (≤2 дней).

main: ●──●──●──●──●──●──●──●──●──●
       ↑  ↑  ↑  ↑  ↑
       все разработчики

Незаконченные фичи скрываются за feature flags:

js
if (featureFlags.newCheckout) {
  return <NewCheckout />
}
return <OldCheckout />

Плюсы: нет merge hell, непрерывная интеграция, быстрые циклы
Минусы: нужны развитый CI/CD, feature flags, культура маленьких коммитов
Когда: большие команды (Google, Facebook), зрелый DevOps

Попробуй в симуляции

Посмотри как выглядит граф коммитов для каждого подхода и переключись между ними.

Сравнение

GitFlowGitHub FlowTrunk-based
Постоянных веток2 (main + develop)1 (main)1 (main)
Время жизни фич-веткиНеделиДниЧасы/дни
РелизыПо расписаниюПри каждом mergeContinuous
СложностьВысокаяНизкаяСредняя
CI/CD требованияНизкиеСредниеВысокие

Как выбрать

GitFlow — если:

  • Поддерживаешь несколько версий одновременно
  • Релизы раз в месяц и реже
  • Нужна долгая стабилизация перед релизом

GitHub Flow — если:

  • Деплоишь несколько раз в день
  • Одна активная версия
  • Небольшая команда

Trunk-based — если:

  • Большая команда (10+ разработчиков)
  • Отличный CI/CD с быстрыми тестами
  • Готовы к feature flags
Нет универсального workflow. GitFlow — для редких релизов, GitHub Flow — для непрерывной доставки, Trunk-based — для больших команд с хорошим CI.
Для непрерывной доставки и веба
main
feature/login
feature/profile
fix/crash
время →
ПЛЮСЫ
Простота
Быстрая доставка
Хорошо для CI/CD
МИНУСЫ
main всегда должна работать
Нет изоляции релизов
КОГДА
Веб-сервисы, SaaS, небольшие команды
УГЛУБЛЁННОЕ ЧТЕНИЕ
Полная статья: Продвинутый Git
Теория, примеры и разбор темы в одном месте