Main и Master Branch в Git: какво е и защо е необходим основният клон

Автор: IT Sectr Публикувано: 2026-05-10 Време за четене: 8 мин

Main Branch (преди Master) — е основният Git клон, който съдържа стабилен продукционен код, готов за внедряване. Всеки commit в main съответства на версия на проекта, а самият клон е защитен от директни промени и служи като единствен източник на истина за целия екип. Според GitHub, 2020, от октомври 2020 г. новият клон по подразбиране се нарича main вместо master.

Основни точки

  • Main / Master Branch — стабилен клон с продукционен код, всеки commit е версия.
  • Защита от директни промени — директните push в main са забранени, всички промени преминават през release или hotfix клонове.
  • Преходът от master към main се осъществи през 2020 г. за инклузивна терминология на всички Git платформи.
  • Git Flow и GitHub Flow използват main различно: в Git Flow само за версии, в GitHub Flow — централен клон.
  • Етикети на версии на всеки commit в main позволяват лесно връщане към всяка предишна версия.

Какво е Main / Master Branch в Git

Main Branch (или Master — в зависимост от настройките на хранилището) — е клонът по подразбиране, който се създава при инициализация на всяко Git хранилище. Той е основният клон на проекта и съдържа код, готов за внедряване в продукция.

За разлика от develop, където кипи ежедневна работа с нови функции, main е витрината на проекта. Всяка версия на код в main е преминала пълен цикъл: разработка във feature клон, интеграция в develop, подготовка на версия в release клон и финално тестване. Едва след това промените влизат в main.

Ключов принцип: main винаги трябва да бъде стабилен. Ако бъде открита грешка в main, това означава спешен hotfix, който трябва да бъде пуснат извънредно. Затова в професионалните проекти main е защитен от случайни промени чрез branch protection rules.

Според Git Book, main не е специален клон с особени свойства, а обикновена препратка към commit, която по конвенция се счита за основна. Git не прави разлика между main и който и да е друг клон на системно ниво.

Преход от master към 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 конфигурации, документация и локални хранилища на разработчиците.

За да преименувате клон в съществуващо хранилище, изпълнете:

bash
# Локално преименуване на master в main
git branch -m master main

# Актуализиране на отдалеченото хранилище
git push -u origin main

# Изтриване на стария master на сървъра
git push origin --delete master

# Актуализиране на HEAD на сървъра
# (чрез уеб интерфейса на GitHub: Settings → Branches → Default branch)

Роля на main в Git Flow и GitHub Flow

Git Flow и GitHub Flow определят ролята на main клона различно. Изборът на модел зависи от размера на екипа, честотата на версиите и изискванията за стабилност на кода.

ХарактеристикаGit FlowGitHub Flow
Роля на mainСамо версииЦентрален клон за разработка
Допълнителни клоновеDevelop, Release, HotfixСамо feature клонове
Честота на версиитеВеднъж на 1-4 седмициНяколко пъти на ден
СложностВисокаНиска
Кога да изберетеМобилни приложения с цикли на версииУеб услуги с непрекъснато внедряване

За разработка на мобилни приложения стандартът е Git Flow, тъй като публикуването на приложения в App Store и Google Play има фиксирани цикли на версии. GitHub Flow е по-подходящ за уеб проекти с възможност за внедряване няколко пъти на ден.

GitHub Flow — опростен подход

В GitHub Flow няма develop клон. Всички feature клонове се създават директно от main и след завършване се сливат обратно чрез Pull Request. Всяко сливане в main автоматично задейства внедряване в продукция. Този модел изисква висока автоматизация на тестването и дисциплина на екипа.

В GitHub Flow няма develop клон. Всички feature клонове се създават директно от main и след завършване се сливат обратно чрез Pull Request. Всяко сливане в main автоматично задейства внедряване в продукция. Този модел изисква висока автоматизация на тестването и дисциплина на екипа.

Защита на main клона

Branch protection за main — задължителна настройка във всеки комерсиален проект. Без нея случайно push може да изпрати незавършен код в продукция или да счупи работещо приложение за всички потребители.

  • Require pull request — директно push в main е забранено. Всички промени чрез PR с преглед.
  • Require approvals — минимум 2 одобрения за сливане в main (в случай на грешка на един рецензент).
  • Require status checks — всички CI/CD проверки трябва да са успешни преди сливане.
  • Require up-to-date — PR трябва да се базира на последния commit в main.
  • Include administrators — защитата важи дори за собствениците на хранилището.
  • Require signed commits — всички commits в main трябва да бъдат подписани с GPG ключ.

Конфигурирането на всички шест правила — стандарт за мобилни проекти с аудитория от 10 000+ потребители. За малки проекти първите три правила са достатъчни.

Сравнение на нивата на защита за различни типове проекти

Нивото на защита на main зависи от мащаба на проекта. Стартъп може да се справи с минимална защита, докато enterprise приложението изисква максимални ограничения.

Версии и етикети в main

Етикетиране (tagging) — практика за създаване на именувани препратки към конкретни commits в main. Всеки етикет съответства на версия на приложението, пусната в продукция. Това позволява бързо превключване към всяка предишна версия за дебъгване или кръпка.

Стандарт за именуване на етикети в мобилната разработка — SemVer (Semantic Versioning): v1.2.3, където първият номер е основната версия (breaking changes), вторият — второстепенна (нови функции), третият — кръпка (корекции).

Етикетът се създава след сливане на release клона в main. Този commit след това се изгражда в CI/CD, подписва се и се изпраща в магазина за приложения. Ако бъде открита грешка в етикета, се създава hotfix клон от този етикет.

bash
# Създаване на анотиран етикет за версия
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

Разбирането на йерархията на клоновете в Git Flow — основа за правилната организация на съвместната разработка. Всеки тип клон има свой източник, предназначение и правила за сливане.

  • Main (ниво 1) — основен клон, съдържа само версии. Създава се при инициализация на хранилището.
  • Develop (ниво 2) — създава се от main в началото на проекта. Съдържа интеграционния код на всички функции.
  • Feature (ниво 3) — създават се от develop. Изолирана разработка на отделни функции.
  • Release (ниво 2) — създава се от develop. Подготовка на конкретна версия за пускане.
  • Hotfix (ниво 2) — създава се от main. Спешна корекция на критични продукционни грешки.

Важно правило: feature никога не се слива директно в main. feature → develop → release → main — правилната верига на сливане. Нарушаването на това правило обезсмисля целия модел Git Flow.

Примерни команди за работа с main

Разгледайте сценарий: екипът завърши подготовката на версия v2.5.0. Release клонът е проверен и готов за сливане в main. След сливането се създава етикет и версията се публикува.

bash
# Превключване към 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) гарантира създаването на commit за сливане, дори ако сливането би могло да се извърши чрез просто преместване на указателя. Това запазва информацията, че промените идват от release клона, което улеснява анализа на историята.

Работа с hotfix чрез main

Ако бъде открита критична грешка в продукцията, процесът се различава от обикновената версия. Hotfix се създава от main и след корекция се слива както в main, така и в develop.

Ако бъде открита критична грешка в продукцията, процесът се различава от обикновената версия. Hotfix се създава от main и след корекция се слива както в main, така и в develop.

bash
# Създаване на hotfix клон от main
git checkout main
git checkout -b hotfix/2.5.1-crash-fix

# Коригиране и commit
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 клонът?

Технически — да, това е обикновена препратка към commit. Но практически — не, тъй като main е клонът по подразбиране и повечето платформи не позволяват изтриване на клон, зададен като default branch. Вместо изтриване, създайте нов default branch и след това изтрийте стария.

Как да поправим грешка в main без hotfix?

Ако грешката не е критична, използвайте обичайния процес: създайте feature клон от develop, поправете грешката, преминете през код ревю и изчакайте следващия цикъл на версия. Hotfix се използва само за критични грешки, блокиращи работата на потребителите.

Каква е разликата между main и origin/main?

main — локален клон на вашия компютър. origin/main — локален кеш на състоянието на отдалечения клон на сървъра. Командата git fetch актуализира origin/main, докато git pull незабавно слива промените във вашия локален main.

Как да преместите main в друга директория?

Използвайте git clone за копиране на цялото хранилище в нова директория. Ако трябва да промените отдалечения URL, изпълнете git remote set-url origin. За промяна на работната директория без копиране на хранилището, използвайте git worktree add.

Трябва ли да защитаваме main, ако екипът е малък?

Да, дори и в екип от двама души, защитата на main е оправдана. Случайно push с грешна команда може да презапише историята. Минималната защита — забрана на директни push и изискване за PR — отнема 5 минути за настройка и предотвратява часове на възстановяване на данни.

Резюме

  • Main / Master Branch — основният Git клон, съдържащ стабилен продукционен код, всеки commit е версия.
  • Преходът от master към main стана индустриален стандарт от 2020 г., поддържан от всички големи Git платформи.
  • Git Flow използва main само за версии, докато GitHub Flow го превръща в централен клон с непрекъснато внедряване.
  • Защитата на main включва 6 правила: PR, одобрение, CI/CD проверки, up-to-date, включване на администратори, подписани commits.
  • Етикетирането на всяка версия в main по схемата SemVer осигурява бърз достъп до всяка версия на приложението.
  • Hotfix клоновете се създават от main за спешни корекции и се сливат както в main, така и в develop.
  • Препоръка: винаги използвайте --no-ff при сливане в main и конфигурирайте branch protection rules преди първия commit в проекта.

Ще разработим мобилно приложение под ключ

IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.

Обсъдете проекта

Прочетете също