Git для DevOps: ветки, теги, релизы, GitFlow и trunk-based

↑ Этап 1 · Фундамент: Linux, Bash, сети

Желательно~4 мин чтенияУровень: junior

Зачем это на собесе

DevOps строит процессы вокруг Git: ветвление, релизы, теги. Нужно выбирать стратегию под команду.

Основы, важные DevOps

git status; git log --oneline --graph --decorate --all
git switch -c feature/x; git switch main
git add -p; git commit -m "feat: ..."; git commit --amend
git fetch; git pull --rebase; git push -u origin feature/x
git stash; git stash pop
git rebase main; git merge --no-ff feature/x
git cherry-pick <sha>; git revert <sha>           # безопасная отмена публичного коммита
git reset --hard <sha>                             # только в локальной ветке!
git reflog                                         # спасение потерянных коммитов
git bisect start; git bisect bad; git bisect good v1.2.0    # поиск коммита-виновника
git diff main...feature/x; git blame file

Правило: не переписывайте историю опубликованных общих веток (нет push --force в main); --force-with-lease для своих веток.

Теги и релизы

  • Аннотированный тег фиксирует релиз: git tag -a v1.4.0 -m "Release 1.4.0" + git push origin v1.4.0; неаннотированный — лёгкая метка;
  • SemVer: MAJOR.MINOR.PATCH (ломающие изменения / новые возможности / исправления), предрелизы 1.4.0-rc.1;
  • по тегу запускается релизный пайплайн: сборка образа с тегом, публикация артефактов, changelog (GitHub/GitLab Releases, git-cliff, semantic-release, release-please);
  • теги неизменяемы: не перемещайте опубликованный тег;
  • образ и артефакты связываются с коммитом: тег образа = версия + короткий SHA.

Стратегии ветвления

Git Flow

Ветки: main (продакшн), develop (интеграция), feature/*, release/*, hotfix/*.

  • плюсы: чёткая структура для релизов по расписанию, поддержка нескольких версий;
  • минусы: долгоживущие ветки, сложные слияния, медленная обратная связь, плохо сочетается с CD.

GitHub Flow

main всегда готова к деплою; короткие feature-ветки → Pull Request → ревью → merge → деплой.

GitLab Flow

GitHub Flow + окружения/релизные ветки (staging, production, release/x.y) для контролируемых выкаток.

Trunk-Based Development

Все работают в main (trunk) короткоживущими ветками (часы–1–2 дня) или напрямую; незавершённое — за feature flags; частые интеграции; непрерывная доставка.

Git FlowTrunk-based
Жизнь ветокнеделичасы/дни
Интеграцияредкая, болезненнаяпостоянная
Релизыпо расписанию, из release-ветокиз main, часто
Требованияпроцесссильные автотесты, feature flags, CI
Подходитверсионируемые продукты, несколько поддерживаемых версий, регулируемые отрасливеб-сервисы, SaaS, CD

DORA-исследования связывают trunk-based + CI/CD с лучшими показателями поставки.

Защита веток и процесс

  • branch protection: запрет прямого push в main, обязательные ревью и статусы CI, линейная история (rebase/squash), подписанные коммиты;
  • CODEOWNERS — автоназначение ревьюеров;
  • Conventional Commits (feat:, fix:, BREAKING CHANGE) → автоматические версии и changelog;
  • шаблоны PR/MR, чек-листы;
  • merge-стратегии: merge commit (сохраняет историю), squash (чистая история), rebase (линейная);
  • hooks: pre-commit (линтеры, секреты: gitleaks), commit-msg (commitlint);
  • не хранить в репозитории секреты, большие бинарники (Git LFS), артефакты сборки.

Monorepo и полирепо

MonorepoPolyrepo
Плюсыатомарные изменения, общий код, единые инструментынезависимость, простые права
Минусынужен умный CI (запуск только затронутого: path filters, Nx, Turborepo, Bazel), рост репозиториясинхронизация версий, дублирование

GitOps

Git — источник истины для инфраструктуры и конфигурации (Helm/Kustomize/Terraform); изменения через PR; ArgoCD/Flux синхронизируют кластер с репозиторием.

Практика отката

  • откат релиза: git revert, выкатка предыдущего тега, откат по артефакту;
  • hotfix: ветка от тега продакшна → исправление → merge в main и релиз;
  • cherry-pick в поддерживаемые ветки.

Типичные ситуации

СитуацияРешение
Закоммитили секретсчитать скомпрометированным: отозвать/ротировать; очистка истории (git filter-repo) — вторично
Конфликт при mergeразрешить, git mergetool, проверить сборку/тесты
Случайно удалили веткуgit reflog → git branch name <sha>
Большой репозиторий--depth 1, sparse-checkout, partial clone (--filter=blob:none) в CI

Вопросы с ответами