Release Branch — это ветка в Git Flow, которая создаётся от develop для подготовки конкретного релиза к выпуску. В ней фиксируется версия приложения, исправляются последние баги и обновляются метаданные — без добавления новых функций. По данным Vincent Driessen, 2010, release ветка отделяет подготовку релиза от текущей разработки, что позволяет параллельно вести обе активности.
Главное
release/X.Y.Z по версии приложения.Release Branch (ветка релиза) — это временная ветка в Git Flow, создаваемая от develop, когда команда решает, что текущий набор функций готов к выпуску. Она существует ровно столько, сколько длится финальная подготовка релиза — от нескольких часов до нескольких дней.
Основное назначение release ветки — заморозить конкретный набор функций для релиза, не останавливая разработку следующих версий. Пока release ветка готовится к выпуску, другие разработчики могут продолжать сливать feature ветки в develop для следующего релиза.
В release ветке не создаются новые функции — только исправления багов, обновление версии приложения, локализация и документация. После завершения всех работ release ветка сливается в main (маркируется как релиз) и обратно в develop (чтобы багфиксы попали в будущие версии).
По данным Atlassian, 2024, release ветки критически важны для проектов с регулярными релизными циклами — они обеспечивают предсказуемость и стабильность процесса выпуска.
Жизненный цикл release ветки от создания до удаления включает несколько этапов. Понимание каждого этапа помогает команде синхронизировать действия и избежать ошибок.
release/2.5.0. develop продолжает принимать feature ветки для следующей версии.v2.5.0.Пункт 6 — обратное слияние в develop — часто забывают, но он критически важен. Без него багфиксы, сделанные в release, не попадут в develop, и в следующем релизе те же ошибки могут проявиться снова.
Время жизни release ветки зависит от сложности релиза и качества кода в develop. В среднем подготовка занимает от 2 до 5 рабочих дней для мобильного приложения среднего размера.
В release ветке выполняется строго ограниченный набор задач. Любое отклонение от этого списка нарушает модель Git Flow и создаёт риски для стабильности релиза.
| Тип изменений | Разрешено | Пример |
|---|---|---|
| Версионирование | Да | Обновление versionName в build.gradle |
| Багфиксы | Да | Исправление crash при запуске |
| Локализация | Да | Добавление переводов для новых экранов |
| Документация | Да | Обновление CHANGELOG и README |
| Новые функции | Нет | Добавление нового экрана профиля |
| Рефакторинг | Нет | Переписывание сетевого слоя |
| Обновление библиотек | Осторожно | Только patch-версии для багфиксов |
Правило запрета новых функций — самое важное в release ветке. Если функция не успела к релизу, она ждёт следующего цикла. Попытка протолкнуть незавершённую функцию в release ветку — главная причина срывов дедлайнов и багов в продакшене.
В release ветке обязательно обновляется номер версии приложения. Для Android это поля versionCode и versionName в build.gradle, для iOS — CFBundleShortVersionString в Info.plist.
// build.gradle (app-level) — обновление версии в release ветке
android {
defaultConfig {
versionCode 42
versionName "2.5.0"
}
}
// Для iOS — обновление Info.plist
// CFBundleShortVersionString = 2.5.0
// CFBundleVersion = 42
Начинающие разработчики часто путают release и hotfix ветки, хотя их назначение принципиально разное. Ошибка в выборе типа ветки может привести к задержке критического исправления или нарушению процесса релиза.
Если ошибка обнаружена в процессе подготовки релиза (в release ветке) — это обычный багфикс. Если ошибка обнаружена в продакшене (на main) — это hotfix, и он создаётся от main, даже если release ветка уже существует.
Единый стандарт именования release веток упрощает навигацию по репозиторию и позволяет CI/CD системам автоматически определять, что ветка относится к релизному процессу.
release/2.5.0.release/merlin.release/2024-12-01.Формат release/X.Y.Z — предпочтительный, так как он явно связывает ветку с номером версии, который будет присвоен релизу. Это упрощает поиск и автоматическую обработку скриптами CI/CD.
Обратное слияние (merge back) release ветки в develop — одна из самых важных и одновременно часто пропускаемых операций. Без неё все багфиксы, сделанные в release, останутся только в релизной версии и не попадут в следующий релизный цикл.
Процесс обратного слияния выполняется после того, как release ветка уже слита в main. Сначала release сливается в develop, затем — удаляется. Это гарантирует, что develop содержит все исправления, сделанные в процессе подготовки релиза.
После обратного слияния возможны конфликты — особенно если в develop уже появились новые feature ветки, которые изменяли те же файлы. Разработчик, ответственный за релиз, разрешает эти конфликты и пушит develop на сервер.
Некоторые команды используют rebase вместо merge для обратного слияния, чтобы история оставалась линейной. Однако merge более безопасен для develop, так как не переписывает историю коммитов, которые уже могли быть использованы другими разработчиками.
Рассмотрим полный цикл работы с release веткой: от создания до удаления после успешного релиза мобильного приложения версии 2.5.0.
# 1. Создание release ветки от develop
git checkout develop
git pull origin develop
git checkout -b release/2.5.0
# 2. Обновление версии и багфиксы
git add build.gradle
git commit -m "Bump version to 2.5.0"
# 3. Исправление багов (только bugfixes)
git add src/fix/
git commit -m "Fix crash on payment screen"
# 4. Отправка release ветки на сервер
git push origin release/2.5.0
# 5. Слияние release в main
git checkout main
git pull origin main
git merge --no-ff release/2.5.0
git tag -a v2.5.0 -m "Release 2.5.0"
git push origin main --tags
# 6. Обратное слияние в develop
git checkout develop
git merge --no-ff release/2.5.0
git push origin develop
# 7. Удаление release ветки
git branch -d release/2.5.0
git push origin --delete release/2.5.0
Команды 5 и 6 — двойное слияние — критически важны. Сначала main получает релизный код и тег, затем develop синхронизируется с багфиксами из release. Если пропустить шаг 6, исправления из релиза не попадут в следующий цикл разработки.
Для мобильных проектов с регулярными релизами процесс создания release ветки и обновления версии можно автоматизировать через CI/CD скрипты. GitHub Actions позволяет создать workflow, который при нажатии на кнопку создаёт release ветку с автоматическим обновлением версии.
Для мобильных проектов с регулярными релизами процесс создания release ветки и обновления версии можно автоматизировать через CI/CD скрипты. GitHub Actions позволяет создать workflow, который при нажатии на кнопку создаёт release ветку с автоматическим обновлением версии.
# GitHub Actions — автоматизация создания release ветки
name: Create Release Branch
on:
workflow_dispatch:
inputs:
version:
description: 'Release version (e.g. 2.5.0)'
required: true
jobs:
create-release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Create release branch
run: |
git checkout develop
git checkout -b release/${{ inputs.version }}
git push origin release/${{ inputs.version }}
Часто задаваемые вопросы
Только одна release ветка одновременно, если вы следуете Git Flow. Наличие двух активных release веток означает, что команда пытается выпустить два релиза параллельно — это нарушает принцип последовательных релизов и создаёт путаницу с версиями.
Удалите коммиты незаконченной функции из release ветки через git revert и отложите функцию до следующего релиза. Никогда не выпускайте незавершённую функциональность в продакшн — технический долг и потенциальные баги не стоят спешки.
Для простых релизов с одним исправлением release ветку можно пропустить и выполнить слияние напрямую из develop в main. Однако для стандартных релизов release ветка обязательна — она фиксирует версию, изолирует подготовку и обеспечивает двойное слияние багфиксов.
Используйте git revert в main для создания нового коммита, отменяющего все изменения релиза. Затем удалите тег релиза командой git push origin --delete vX.Y.Z. После исправления проблем создайте новую release ветку с увеличенным номером патча.
Release candidate (RC) — это артефакт сборки, который проходит финальное тестирование. Release branch — это ветка Git, из которой создаётся release candidate. Одна release ветка может породить несколько RC-сборок (RC1, RC2 и т.д.) по мере исправления багов.
Итоги
release/X.Y.Z с номером версии по SemVer.Мы разработаем мобильное приложение под ключ
IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.
Читайте также