Main Branch (ранее Master) — это основная ветка Git, которая содержит стабильный продакшен-код, готовый к развёртыванию. Каждый коммит в main соответствует релизной версии проекта, а сама ветка защищена от прямых изменений и служит единым источником истины для всей команды. По данным GitHub, 2020, с октября 2020 года новая ветка по умолчанию называется main вместо master.
Главное
Main Branch (или Master — в зависимости от настроек репозитория) — это ветка по умолчанию, которая создаётся при инициализации любого Git-репозитория. Она является основной веткой проекта и содержит код, готовый к развёртыванию в продакшн.
В отличие от develop, где кипит ежедневная работа с новыми функциями, main — это витрина проекта. Каждая версия кода в main прошла полный цикл: разработка в feature ветке, интеграция в develop, подготовка релиза в release ветке и финальное тестирование. Только после этого изменения попадают в main.
Ключевой принцип: main всегда должна быть стабильной. Если в main обнаружена ошибка, это означает срочный hotfix, который нужно выпустить вне очереди. Поэтому в профессиональных проектах main защищена от случайных изменений branch protection rules.
По данным Git Book, main — это не специальная ветка с особыми свойствами, а обычная ссылка на коммит, которая по соглашению считается основной. Git не делает различий между main и любой другой веткой на уровне системы.
Исторически ветка по умолчанию в Git называлась master. В июне 2020 года Black Lives Matter движение привлекло внимание к терминам master и slave в IT-индустрии. GitHub объявил о переходе на термин main для ветки по умолчанию.
С октября 2020 года все новые репозитории на GitHub создаются с веткой main. GitLab и Bitbucket также внедрили поддержку main как имени по умолчанию. Git 2.28 (июль 2020) добавил опцию init.defaultBranch для настройки имени ветки по умолчанию.
Технически переименование существующей ветки с master на main — простая операция. Основная сложность — обновить все ссылки в CI/CD конфигурациях, документации и локальных репозиториях разработчиков.
Для переименования ветки в существующем репозитории выполните:
# Локальное переименование master в main
git branch -m master main
# Обновление удалённого репозитория
git push -u origin main
# Удаление старой master на сервере
git push origin --delete master
# Обновление HEAD на сервере
# (через веб-интерфейс GitHub: Settings → Branches → Default branch)
Git Flow и GitHub Flow по-разному определяют роль main-ветки. Выбор модели зависит от размера команды, частоты релизов и требований к стабильности кода.
| Характеристика | Git Flow | GitHub Flow |
|---|---|---|
| Роль main | Только релизные версии | Центральная ветка разработки |
| Дополнительные ветки | Develop, Release, Hotfix | Только feature ветки |
| Частота релизов | Раз в 1-4 недели | Несколько раз в день |
| Сложность | Высокая | Низкая |
| Когда выбрать | Мобильные приложения с релизными циклами | Веб-сервисы с непрерывным деплоем |
Для мобильной разработки стандартом является Git Flow, так как публикация приложения в App Store и Google Play имеет фиксированные релизные циклы. GitHub Flow больше подходит для веб-проектов с возможностью деплоя несколько раз в день.
В GitHub Flow нет develop ветки. Все feature ветки создаются прямо от main, а после завершения сливаются обратно через Pull Request. Каждое слияние в main автоматически запускает деплой в продакшн. Эта модель требует высокой автоматизации тестирования и discipline команды.
В GitHub Flow нет develop ветки. Все feature ветки создаются прямо от main, а после завершения сливаются обратно через Pull Request. Каждое слияние в main автоматически запускает деплой в продакшн. Эта модель требует высокой автоматизации тестирования и discipline команды.
Branch protection для main — обязательная настройка в любом коммерческом проекте. Без неё случайный push может отправить в продакшн незаконченный код или сломать работающее приложение для всех пользователей.
Настройка всех шести правил — стандарт для мобильных проектов с аудиторией от 10 000+ пользователей. Для небольших проектов достаточно первых трёх правил.
Уровень защиты main зависит от масштаба проекта. Стартап может обойтись минимальной защитой, а enterprise-приложение требует максимальных ограничений.
Тегирование (tagging) — практика создания именованных ссылок на конкретные коммиты в main. Каждый тег соответствует версии приложения, выпущенной в продакшн. Это позволяет быстро переключиться на любой предыдущий релиз для отладки или патча.
Стандарт именования тегов в мобильной разработке — SemVer (Semantic Versioning): v1.2.3, где первый номер — мажорная версия (breaking changes), второй — минорная (новые функции), третий — патч (исправления).
Тег создаётся после слияния release ветки в main. Этот коммит затем собирается в CI/CD, подписывается и отправляется в магазин приложений. Если в теге обнаружена ошибка, создаётся hotfix ветка от этого тега.
# Создание аннотированного тега релиза
git tag -a v2.4.1 -m "Release version 2.4.1"
# Отправка тега на сервер
git push origin v2.4.1
# Просмотр всех тегов в репозитории
git tag -l "v2.*"
# Создание hotfix ветки от конкретного тега
git checkout -b hotfix/crash-fix v2.4.1
Понимание иерархии веток в Git Flow — основа для правильной организации совместной разработки. Каждый тип ветки имеет свой источник, назначение и правила слияния.
Важное правило: feature никогда не сливается напрямую в main. feature → develop → release → main — правильная цепочка слияний. Нарушение этого правила лишает смысла всю модель Git Flow.
Рассмотрим сценарий: команда завершила подготовку релиза v2.5.0. Release ветка проверена и готова к слиянию в main. После слияния создаётся тег и релиз публикуется.
# Переключение на main и обновление
git checkout main
git pull origin main
# Слияние проверенной release ветки
git merge --no-ff release/2.5.0
# Создание тега релиза
git tag -a v2.5.0 -m "Release 2.5.0 - Payment integration"
# Отправка main и тега на сервер
git push origin main --tags
Флаг --no-ff (no fast-forward) гарантирует создание коммита слияния, даже если слияние можно было бы выполнить простым перемещением указателя. Это сохраняет информацию о том, что изменения пришли из release ветки, что упрощает анализ истории.
Если в продакшене обнаружена критическая ошибка, процесс отличается от обычного релиза. Hotfix создаётся от main, а после исправления сливается как в main, так и в develop.
Если в продакшене обнаружена критическая ошибка, процесс отличается от обычного релиза. Hotfix создаётся от main, а после исправления сливается как в main, так и в develop.
# Создание hotfix ветки от main
git checkout main
git checkout -b hotfix/2.5.1-crash-fix
# Исправление и коммит
git add src/fix/
git commit -m "Fix crash on login screen"
# Слияние hotfix обратно в main
git checkout main
git merge --no-ff hotfix/2.5.1-crash-fix
git tag -a v2.5.1 -m "Hotfix 2.5.1"
git push origin main --tags
# Слияние hotfix также в develop
git checkout develop
git merge --no-ff hotfix/2.5.1-crash-fix
git push origin develop
# Удаление hotfix ветки
git branch -d hotfix/2.5.1-crash-fix
Часто задаваемые вопросы
Технически — да, это обычная ссылка на коммит. Но практически — нет, так как main является веткой по умолчанию, и большинство платформ не позволяют удалить ветку, установленную как default branch. Вместо удаления создайте новую default branch и затем удалите старую.
Если ошибка не критическая, используйте обычный процесс: создайте feature ветку от develop, исправьте ошибку, пройдите код-ревью и дождитесь следующего релизного цикла. Hotfix используется только для критических ошибок, блокирующих работу пользователей.
main — локальная ветка на вашем компьютере. origin/main — локальный кэш состояния удалённой ветки на сервере. Команда git fetch обновляет origin/main, а git pull сразу сливает изменения в вашу локальную main.
Используйте git clone для копирования всего репозитория в новую директорию. Если нужно сменить удалённый URL, выполните git remote set-url origin. Для смены рабочей директории без копирования репозитория используйте git worktree add.
Да, даже в команде из двух человек защита main оправдана. Случайный push с неверной командой может перезаписать историю. Минимальная защита — запрет прямых push и требование PR — занимает 5 минут на настройку и предотвращает часы восстановления данных.
Итоги
Мы разработаем мобильное приложение под ключ
IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.
Читайте также