#Как проявляется ошибка и когда применим способ
При git push сервер отвечает отказом в доступе, хотя локальные коммиты созданы успешно. Причина может быть в учётной записи, правах на репозиторий, защищённой ветке, неверном адресе или способе аутентификации. Различайте отказ авторизации и запрет политики веток.
#Причины и признаки
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Недостаточно прав на записьУ пользователя есть право читать проект, но не отправлять изменения. | 403 либо permission denied при push в открытый для чтения репозиторий. | Проверить роль участника и запросить доступ у владельца. |
| Защищённая веткаСервер запрещает прямой push даже авторизованным разработчикам. | Сообщение о protected branch, required review или policy. | Отправить изменения в отдельную ветку и создать запрос на объединение. |
#Пошаговая диагностика и решение
- 1. Сохраните точную ошибку и не повторяйте отправку много разВ терминале сохраните текст отказа, не включая токены в снимок экрана. Если это non-fast-forward, а не permission denied, проблема относится к истории ветки; не применяйте рекомендации для доступа. Если сервер сообщает о защищённой ветке, сразу переходите к проверке политики репозитория.
- 2. Проверьте адрес назначенияВ каталоге репозитория выполните git remote -v. Сопоставьте адрес и название проекта с тем, куда хотели отправить коммиты. Если это форк или чужой репозиторий, вы можете не иметь права записи. Не меняйте remote на адрес с вписанным паролем.
- Читает адреса fetch/push; проверьте, что они не содержат секретовLinux · Терминал (Bash)КомандаЧитает адреса fetch/push; проверьте, что они не содержат секретов.
git remote -v
- 3. Узнайте текущую ветку и её отслеживаниеВыполните git branch -vv и git status. Убедитесь, что изменения действительно закоммичены и текущая ветка та, которую можно отправлять. При сообщении upstream not set настройте её только после проверки разрешённой целевой ветки.
- Чтение ветки и состояния; ничего не отправляетLinux · Терминал (Bash)КомандаЧтение ветки и состояния; ничего не отправляет.
git branch -vvgit status --short
- 4. Проверьте роль и ограничения в веб-интерфейсеОткройте сайт GitHub, GitLab или другого используемого сервера, войдите под своей учётной записью и перейдите в нужный проект. Проверьте, можете ли вы создавать ветки и запросы на объединение. Раздел правил защищённых веток может быть виден только администраторам; при отсутствии доступа обратитесь к владельцу проекта.
- 5. Проверьте правильность метода авторизацииДля SSH-адреса проверьте выбранный SSH-ключ и его привязку к аккаунту без вывода приватного ключа. Для HTTPS проверьте менеджер учётных данных и доступность токена с нужными правами; пароль аккаунта нередко не принимается вместо токена. Не выкладывайте содержимое ~/.ssh или токен в журнал.
- 6. Попробуйте штатный путь через личную веткуЕсли прямой push в main защищён, создайте новую ветку от вашей текущей работы с осмысленным именем и выполните git push -u origin ИМЯ_ВЕТКИ, только если вам разрешено создавать ветки на этом сервере. После отправки откройте веб-интерфейс проекта и создайте запрос на объединение для проверки.
- Дополнительная команда по темеLinux · Терминал (Bash)С осторожностьюСоздаёт локальную ветку и отправляет её в origin; требует разрешённой записи в репозиторий.
git switch -c fix/permission-checkgit push -u origin fix/permission-checkКоманда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.
- 7. Разберите сохраняющийся отказЕсли push в новую ветку тоже запрещён, владельцу проекта передайте только название репозитория, ветку, время и очищенную от секретов ошибку. Не обходите защиту, не используйте чужую учётную запись и не выполняйте force push.
#Проверка результата и действия при повторении
Исправление подтверждено, если сервер принимает push в разрешённую ветку либо открыт запрос на объединение, а в веб-интерфейсе виден нужный коммит. Если разрешение на запись не предоставлено — это корректная причина остановиться, а не техническая неисправность Git.
Если на указанном шаге результат отличается, остановитесь и запишите первое полное сообщение об ошибке, версию инструментов и проверенное состояние до исправления. Не переходите к опасным действиям на действующем проекте: повторите проверку на отдельной копии, верните сохранённые файлы и только затем выбирайте следующую причину.