main и master: два имени главной ветки
Обновлено 31 июля 2026 г.
main и master - это два имени для главной ветки репозитория, и никакой технической разницы между ними нет: обе устроены так же, как любая другая ветка.
master был именем по умолчанию с самого начала истории git. GitHub перевёл новые репозитории на main в октябре 2020 года, а git с версии 2.28 разрешает задать имя первой ветки самому. Проекты, заведённые раньше, остались как были, поэтому оба имени живут рядом до сих пор. Увидишь в чужом репозитории master - читай «главная ветка».
Какое имя у тебя, показывает одна команда:
$ git branch --show-current
mainЗадать своё умолчание
$ git config --global init.defaultBranch mainНастройка действует на новые репозитории, создаваемые через git init. На клон она не влияет: git clone берёт имя ветки с сервера.
Переименовать в существующем репозитории
Локально имя меняет обычный флаг -m команды git branch:
$ git branch -m master main
$ git branch -vv
* main d01f9d3 [origin/master] first versionВетка уже main, но привязана всё ещё к серверной master. Отправь её и перепривяжи:
$ git push -u origin main
To github.com:username/my-project.git
* [new branch] main -> main
branch 'main' set up to track 'origin/main'.Теперь смени главную ветку в настройках репозитория на GitHub: Settings, раздел General, блок Default branch. Пока это не сделано, старую ветку удалить не дадут, потому что сервер считает её текущей:
$ git push origin --delete master
remote: error: refusing to delete the current branch: refs/heads/master
! [remote rejected] master (deletion of the current branch prohibited)После смены умолчания та же команда проходит:
$ git push origin --delete master
To github.com:username/my-project.git
- [deleted] masterУ тех, кто уже склонировал проект
Переименование на сервере чужие копии не трогает. У каждого, кто клонировал проект раньше, локальная ветка так и называется master и привязана к серверной, которой больше нет. Разгребается это тремя командами у себя:
$ git branch -m master main
$ git fetch origin
$ git branch -u origin/main main
branch 'main' set up to track 'origin/main'.Предупреди команду заранее: человек, который придёт в понедельник и сделает git push по привычке, получит непонятный отказ и потратит час.
Частые ошибки
Ждать от имени особого поведения. Ни защиты, ни особых прав имя не даёт: главной ветку делает запись в настройках хостинга, а сама она остаётся обычным указателем на коммит.
Переименовать ветку и забыть про всё, что упоминает старое имя строкой. Скрипты сборки, правила защиты веток, конфигурация деплоя и задачи автоматики часто содержат master прямым текстом, и после переименования они тихо перестают срабатывать.