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 захищена від випадкових змін правилами захисту гілки.
За даними 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 автоматично запускає деплой у продакшен. Ця модель вимагає високої автоматизації тестування та дисципліни команди.
У GitHub Flow немає develop гілки. Всі feature гілки створюються прямо від main, а після завершення зливаються назад через Pull Request. Кожне злиття в main автоматично запускає деплой у продакшен. Ця модель вимагає високої автоматизації тестування та дисципліни команди.
Захист гілки для main — обов'язкове налаштування в будь-якому комерційному проєкті. Без нього випадковий push може відправити в продакшен незавершений код або зламати працюючий додаток для всіх користувачів.
Налаштування всіх шести правил — стандарт для мобільних проєктів з аудиторією від 10 000+ користувачів. Для невеликих проєктів достатньо перших трьох правил.
Рівень захисту main залежить від масштабу проєкту. Стартап може обійтися мінімальним захистом, а enterprise-додаток вимагає максимальних обмежень.
Тегування — практика створення іменованих посилань на конкретні коміти в main. Кожен тег відповідає версії додатку, випущеній у продакшен. Це дозволяє швидко переключитися на будь-який попередній реліз для налагодження або патча.
Стандарт іменування тегів у мобільній розробці — SemVer (Семантичне Версіонування): 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 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.
Читайте також