Git LinuxWindowsmacOS

Git: error src refspec main does not match any

  • Обновлено
  • Чтение ≈ 3 минуты

Краткий ответ

Создайте коммит и проверьте название ветки.

В этой статье
  1. Что означает ошибка
  2. Причины и решения
  3. Пошаговое решение
  4. Диагностика
  5. Исправление имён
  6. Пустые папки и .gitignore

#Что означает ошибка

Сообщение
refspec does not match

Ошибка error: src refspec main does not match any при git push origin main значит, что локальной ветки main не существует или в ней нет коммитов. Часто это возникает в новом репозитории, где ветка называется master, или когда ещё не сделан первый коммит.

Проверьте имя ветки и наличие коммитов.

Затем выровняйте имена с удалённым репозиторием.

Создайте коммит и проверьте название ветки.

#Причины и решения

Возможная причинаКак узнатьЧто делать
Нет коммитовgit log -1 --oneline сообщает, что коммитов пока нетСоздайте осмысленный первый коммит из проверенных файлов.
Веткаgit branch --show-current показывает master, а вы отправляете mainОтправьте существующую ветку или согласованно переименуйте её.
Пустой репозиторийНовый локальный репозиторий создан без первого коммитаДобавьте README и выполните первый коммит до push.
RemoteRemote указывает на другую цель — это отдельная ошибка, а не причина отсутствующей локальной ссылкиСверьте origin, но сначала устраните отсутствие ветки/коммита.

#Пошаговое решение

  1. Проверьте текущую веткуОткройте терминал в папке проекта (VS Code → «Терминал» → «Новый терминал», PowerShell или обычный терминал Linux/macOS). Выполните git status -sb и git branch --show-current. Если имя ветки master или другое, а вы отправляете git push origin main, ошибка ожидаема: локального main нет. Если имя пустое, выполните git status и сначала решите задачу detached HEAD; не переименовывайте ветку вслепую.
  2. Проверьте наличие коммитовВыполните git log -1 --oneline. Если вывод начинается с хэша и сообщения, хотя бы один коммит уже есть; если получаете does not have any commits yet, репозиторий пока пуст. Отдельно выполните git remote -v и сравните адрес origin с нужным проектом в браузере. Ошибка src refspec относится к локальному источнику для push, поэтому не надо сразу менять авторизацию или адрес удалённого сервера.
  3. Сделайте первый коммитТолько для действительно пустого нового репозитория создайте первый коммит: добавьте файл README.md в корень (можно через редактор), затем выполните git add README.md, проверьте git status и git commit -m "Initial commit". Если Git запросит имя и почту автора, настройте их для текущего репозитория командами git config user.name "Ваше имя" и git config user.email "you@example.com", заменив значения. Не используйте git add . без просмотра: так можно случайно включить пароли и файлы окружения. После коммита git log -1 --oneline покажет его хэш.
  4. Переименуйте веткуПереименование локальной ветки в main — вариант, а не обязательный шаг. Если ветка называется master, и вы решили назвать её main, убедитесь, что это не нарушает правила команды, затем выполните git branch -m main (только текущая ветка). Если название менять нельзя, используйте существующее имя в push, например git push -u origin master. Опасный ключ -M для принудительного переименования существующей ветки здесь не нужен.
  5. Отправьте веткуПосле проверки имени ветки и наличия коммита выполните, например, git push -u origin main **только если локальная ветка называется main**. Успех — сообщение о новой/обновлённой ветке и указании upstream. Если сервер ответил non-fast-forward, не применяйте --force: сперва выполните git fetch origin и сравните истории (git log --oneline --all --graph). Если появилась Authentication failed, это другая ошибка — проверьте права и способ входа.

#Диагностика

Выполните git branch --show-current и git log --oneline -3. Если команда git log пишет does not have any commits yet, сделайте коммит: git add . и git commit -m "Initial commit". Если текущая ветка master, а вы пушите main, это и есть причина. Список веток: git branch -a, статус: git status.

#Исправление имён

Переименуйте локальную ветку: git branch -M main, затем git push -u origin main. Либо отправьте существующую ветку под нужным именем: git push origin master:main. Чтобы новые репозитории создавались с main: git config --global init.defaultBranch main. Проверьте удалённую ветку по умолчанию в настройках GitHub/GitLab.

#Пустые папки и .gitignore

Git не коммитит пустые папки; если git add . ничего не добавил, проверьте .gitignore (git status --ignored). Убедитесь, что вы в корне репозитория (git rev-parse --show-toplevel). Проверьте адрес удалённого репозитория: git remote -v; добавляйте новый origin только если он отсутствует, используя точный адрес своего проекта, а не пример.

Linux · Терминал (Bash)Команда
Не запускать весь сценарий автоматически: первый коммит и push нужны только после соответствующих проверок.
# В корне проекта: диагностика без изменений
git status -sb
git branch --show-current
git log -1 --oneline
git remote -v
# Ниже команды для РАЗНЫХ ситуаций, не последовательность:
# Первый коммит: git add README.md && git commit -m "Initial commit"
# Если ветка уже main: git push -u origin main

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 1 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.