Git LinuxWindowsmacOS

Git: failed to push some refs — remote rejected

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

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

«failed to push some refs … remote rejected» значит, что сервер отклонил push: защищённая ветка, нет прав, файл слишком большой или сработал хук. Прочитайте строки remote: в выводе, сделайте pull --rebase и создайте pull request.

В этой статье
  1. Что означает ошибка
  2. Причины и решения
  3. Пошаговое решение

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

Сообщение
failed to push some refs

Git отправил коммиты, но сервер (GitHub, GitLab, Gitea) их не принял. Причину сообщает сам сервер в строках, начинающихся с remote: — они находятся выше итоговой фразы failed to push some refs. Не игнорируйте их: там обычно написано protected branch, file exceeds, permission denied или pre-receive hook declined.

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

Возможная причинаКак узнатьЧто делать
Защищённая веткаПрямой push в main запрещён.remote: error: GH006: Protected branch update failed.Создайте ветку и pull request.
Нет правНет прав записи в репозиторий.remote: Permission denied.Получите права или форкните.
Слишком большой файлФайл больше лимита (100 МБ на GitHub).remote: error: File ... is 120 MB.Используйте Git LFS или удалите файл из истории.
Хук сервераСерверный хук отклонил коммит.pre-receive hook declined.Прочитайте причину хука.

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

  1. Прочитайте строки remoteВ терминале проекта откройте полный вывод неудачного git push и найдите несколько строк выше failed to push some refs, особенно сообщения remote: и ! [remote rejected]. Скопируйте точную причину, не включая токены доступа. Выполните git status -sb, git branch --show-current и git remote -v, сверьте текущую ветку и адрес репозитория с веб-страницей проекта. Не начинайте с git pull --rebase: ошибка может относиться к защищённой ветке, размеру файла или серверному правилу, и объединение истории её не исправит.
  2. Для устаревшей ветки сделайте pullЕсли в выводе есть non-fast-forward или fetch first, а не remote rejected, выполните git fetch origin, затем git log --oneline --graph --decorate --all -n 30. Проверьте новые коммиты в соответствующей удалённой ветке и собственные незакоммиченные изменения. При сохранённой работе и согласованной политике команды можно выполнить git rebase origin/ИМЯ_ВЕТКИ либо слияние; это альтернативы. При конфликте посмотрите git status, исправьте отмеченные файлы, выполните git add и git rebase --continue или отмените git rebase --abort. Не используйте reset --hard и force.
  3. Для защищённой ветки создайте веткуЕсли сервер пишет protected branch или GH006, прямой push запрещён правилом проекта. В терминале создайте новую ветку от текущих коммитов: git switch -c fix/my-change, где имя выбрано вами и ещё не занято. Выполните git push -u origin fix/my-change, затем на сайте GitHub/GitLab откройте предложение создания запроса на слияние и отправьте его на проверку. Если ветка уже существует, выберите другое имя вместо принудительного переименования. Не отключайте защиту основной ветки ради одной публикации.
  4. Проверьте праваЕсли вывод сообщает о недостаточных правах, убедитесь, что git remote -v указывает на ваш проект, а вы вошли в правильную учётную запись. В веб-интерфейсе проверьте роль участника и ограничения ветки; попросите владельца предоставить доступ либо создайте копию репозитория (fork) и отправьте запрос на слияние. При HTTPS используйте поддерживаемый менеджер учётных данных или токен с минимальными разрешениями, а при SSH — проверьте ssh -T git@github.com для GitHub. Не записывайте токен в URL репозитория или файл с исходным кодом.
  5. Для больших файлов используйте LFSЕсли сервер отклоняет файл по лимиту размера, найдите его имя в строке remote: и проверьте, попал ли файл в историю коммитов; удаление его только из текущей папки не убирает его из предыдущих коммитов. Для нового проекта используйте Git LFS по документации хостинга, если это разрешено, либо исправьте историю в отдельной копии после резервного сохранения и согласования с командой. Не запускайте массовое переписывание истории чужой ветки. Повторите push только после проверки нового размера и правил проекта.
  6. Удалите секретыЕсли сервер пишет о найденном секрете, сразу считайте ключ скомпрометированным: отзовите его в системе выдачи, создайте новый, уберите секрет из файлов и истории по согласованной процедуре. Простое добавление файла в .gitignore не убирает уже отправленные коммиты. Проверьте правила защиты секретов и используйте переменные окружения или хранилище секретов. Не отправляйте один и тот же пароль повторно, пытаясь подобрать флаг обхода.
  7. Не используйте force без необходимостиПосле устранения именно вашей причины повторите git status и обычную git push -u origin ИМЯ_ВЕТКИ с реальным именем; успех — сообщение об обновлении удалённой ветки и появление коммита на сайте. git push --force и --force-with-lease не являются универсальным исправлением отклонённого push: они не обходят защищённую ветку, правила безопасности или отсутствие прав, но способны переписать историю. Если сервер продолжает отклонять запись, сохраните строки remote: для администратора репозитория.
  8. Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
    Выберите подходящий вариант — это не команды для последовательного выполнения
    Вариант 1Набор диагностических и взаимоисключающих сценариев; не выполняйте комментарии как единую обязательную цепо…
    Linux · Терминал (Bash)Команда
    Набор диагностических и взаимоисключающих сценариев; не выполняйте комментарии как единую обязательную цепочку.
    git status -sb
    git branch --show-current
    git remote -v
    # Только при сообщении non-fast-forward:
    # git fetch origin
    # git log --oneline --graph --decorate --all -n 30
    # Только при защищённой ветке:
    # git switch -c fix/my-change
    # git push -u origin fix/my-change
    Вариант 2Принудительная отправка отключена: причина отказа сервера должна быть устранена адресно.
    Linux · Терминал (Bash)Команда
    Принудительная отправка отключена: причина отказа сервера должна быть устранена адресно.
    # Для устранения remote rejected эта команда НЕ нужна.
    # Не переписывайте общую историю; обратитесь к владельцу проекта.

Для GitHub лимит — 100 МБ на файл и 5 ГБ на репозиторий; для GitLab настраивается администратором. Если вы пушите по HTTPS с паролем, он больше не принимается: создайте персональный токен (PAT) на github.com/settings/tokens. Справка по Git — git-scm.com.

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

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

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