ДокументацияGitGit Flow и рабочие процессы
Средний 8 мин чтения

Git Flow и рабочие процессы

Git Flow, GitHub Flow и Trunk-based development — популярные модели ветвления для командной работы. Выбор зависит от размера команды и частоты деплоя.

gitworkflowgit flowgithub flowbranching model

GitHub Flow

Простая модель, подходит для большинства команд:

main  ─────────────────────────────── (всегда деплоится)
          \           /  \       /
    feature/A ─────       feature/B ─
                ↑               ↑
               PR + review      PR + review

Принципы:

  1. main всегда готова к деплою
  2. Разработка идёт в feature-ветках
  3. PR → Code review → Merge в main
  4. Деплой после каждого мержа
# Типичный цикл
git checkout -b feature/user-search
# ... разработка ...
git push -u origin feature/user-search
# Открыть PR на GitHub/GitLab
# После аппрува — merge в main

Git Flow

Строгая модель для больших проектов с релизным циклом:

main    ──●──────────────────────●──
          ↑                     ↑
         v1.0                  v1.1
          |                     |
develop  ─●──●──●──●──●──●──●──●──
              \     /   \     /
           feat/A      feat/B
               release/1.1
               hotfix/critical-bug

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

ВеткаОписание
mainСтабильные релизы с тегами версий
developВетка разработки, отражает следующий релиз

Вспомогательные ветки

ВеткаОтВОписание
feature/*developdevelopНовая функциональность
release/*developmain + developПодготовка релиза
hotfix/*mainmain + developСрочный фикс в продакшн
# Новая функция
git checkout -b feature/payment develop
# ... разработка ...
git checkout develop
git merge --no-ff feature/payment
git branch -d feature/payment

# Подготовка релиза
git checkout -b release/1.2 develop
# Только баг-фиксы в этой ветке
git checkout main && git merge --no-ff release/1.2
git tag -a v1.2 -m "Version 1.2"
git checkout develop && git merge --no-ff release/1.2

# Срочный фикс
git checkout -b hotfix/fix-payment main
# ... фикс ...
git checkout main && git merge --no-ff hotfix/fix-payment
git tag -a v1.1.1
git checkout develop && git merge --no-ff hotfix/fix-payment

Trunk-Based Development

Все разработчики коммитят прямо в main (trunk) несколько раз в день:

main ──●──●──●──●──●──●──●──●──
         \       /
     short-lived (< 1 день)

Для этого нужны:

  • Feature flags (переключение функций без деплоя)
  • Мощный CI/CD с быстрыми тестами
  • Высокая культура ревью

Commit Convention

Структурированные сообщения коммитов упрощают генерацию changelog:

<type>(<scope>): <subject>

<body>

<footer>

Типы (Conventional Commits)

feat:     Новая функциональность
fix:      Исправление бага
docs:     Документация
style:    Форматирование (не влияет на логику)
refactor: Рефакторинг без новых функций/фиксов
test:     Добавление/исправление тестов
chore:    Обновление зависимостей, настройки
perf:     Улучшение производительности
ci:       Изменения CI/CD
# Примеры хороших сообщений
git commit -m "feat(auth): add Google OAuth login"
git commit -m "fix(editor): prevent code loss on tab switch"
git commit -m "refactor(tasks): extract TaskCard component"
git commit -m "chore: update @nuxt/ui to v4.5.0"

# Ломающее изменение
git commit -m "feat!: remove deprecated API endpoints

BREAKING CHANGE: /api/v1/* endpoints removed, use /api/v2/*"

Теги и релизы

# Лёгкий тег (просто метка)
git tag v1.0.0

# Аннотированный тег (с сообщением и автором)
git tag -a v1.0.0 -m "Release version 1.0.0"

# Просмотр тегов
git tag
git tag -l "v1.*"

# Отправить тег на remote
git push origin v1.0.0
git push origin --tags  # Все теги

Полезные алиасы

# ~/.gitconfig
[alias]
  st = status
  co = checkout
  br = branch
  lg = log --oneline --graph --all --decorate
  undo = reset HEAD~1
  save = stash push -m
  aliases = config --get-regexp alias
git lg  # Граф всей истории в одну строку