Команда git push возвращает ошибку rejected — non-fast-forward, а код так и не появляется на GitHub — это самый частый симптом, с которым сталкиваются при первой попытке загрузить проект. Причина почти всегда одна: локальный репозиторий либо не связан с удалённым, либо история коммитов разошлась. Ниже разберём весь путь от создания репозитория до успешной отправки кода, включая типичные ошибки и способы их обойти.
Инструкция подходит для Windows, macOS и Linux: команды Git идентичны на всех платформах, различается только способ установки самого клиента. Перед началом убедитесь, что у вас есть аккаунт на GitHub и установлен Git — проверить это можно командой git --version в терминале.
Создание репозитория на GitHub
Первый шаг — создать пустой репозиторий на сайте. Нажмите кнопку New на главной странице GitHub или значок «+» в правом верхнем углу и выберите New repository. Укажите имя проекта, при желании добавьте описание и выберите видимость: Public (доступен всем) или Private (только вам и приглашённым).
На этом этапе есть важный нюанс. GitHub предложит сразу создать файлы README, .gitignore и лицензию. Если вы планируете загрузить уже существующий локальный проект, не создавайте эти файлы при инициализации — иначе удалённая история коммитов не совпадёт с локальной, и первый push завершится ошибкой. Пустой репозиторий принимает загрузку без конфликтов.
⚠️ Внимание: если вы всё же создали репозиторий с README, перед отправкой кода выполнитеgit pull origin main --allow-unrelated-historiesлибо используйтеgit push --force, понимая, что принудительная отправка перезапишет удалённую историю.
Подготовка локального проекта
Откройте терминал в папке вашего проекта. На Windows удобно использовать Git Bash, который устанавливается вместе с Git, либо встроенный терминал редактора вроде VS Code. Дальнейшие команды выполняются последовательно.
git init
git add .
git commit -m "Первый коммит"
Что делает каждая команда: git init превращает папку в Git-репозиторий, создавая скрытую служебную директорию .git. Команда git add . добавляет все файлы проекта в индекс — зону подготовленных изменений. А git commit фиксирует снимок состояния с сообщением, которое потом будет видно в истории.
- 📁 Проверьте, что в проекте нет лишних файлов: паролей, ключей API, папок с зависимостями вроде
node_modules. - 📝 Создайте файл
.gitignoreи перечислите в нём то, что не должно попасть на GitHub. - 💬 Пишите осмысленные сообщения коммитов — через месяц вы сами себе скажете спасибо.
☑️ Перед первой загрузкой кода
Привязка к удалённому репозиторию и отправка
Теперь нужно связать локальную папку с репозиторием на GitHub. Скопируйте URL репозитория — он отображается на странице проекта под кнопкой Code. Доступны два протокола: HTTPS и SSH. Для начала проще HTTPS, но при каждой отправке может запрашиваться авторизация.
git remote add origin https://github.com/username/project.git
git branch -M main
git push -u origin main
Здесь git remote add origin регистрирует удалённый репозиторий под коротким именем origin. Команда git branch -M main переименовывает текущую ветку в main — стандартное имя основной ветки на GitHub. Флаг -u при первом push связывает локальную ветку с удалённой, и в дальнейшем достаточно писать просто git push.
⚠️ Внимание: при авторизации через HTTPS GitHub больше не принимает пароль от аккаунта. Вместо него используется Personal Access Token, который создаётся в настройках профиля: Settings → Developer settings → Personal access tokens. Токен показывается один раз — сохраните его сразу.
Альтернативные способы загрузки
Командная строка — не единственный путь. В зависимости от задачи удобнее могут оказаться другие инструменты.
| Способ | Когда подходит | Ограничения |
|---|---|---|
| Git CLI | Полный контроль, любые сценарии | Требует знания команд |
| GitHub Desktop | Новички, визуальная работа с коммитами | Нет продвинутых операций |
| Загрузка через веб | Пара файлов без настройки Git | Ограничение на размер и число файлов |
| VS Code / IDE | Работа не выходя из редактора | Зависит от встроенного Git |
| GitHub CLI (gh) | Создание репозитория из терминала | Нужна отдельная установка |
Веб-интерфейс позволяет перетащить файлы прямо на страницу репозитория через кнопку Add file → Upload files. Это рабочий вариант для быстрой загрузки, но он не подходит для регулярной разработки: история изменений будет состоять из громоздких коммитов «Add files via upload».
Создание репозитория через GitHub CLI
Установите утилиту gh с официального сайта cli.github.com, выполните gh auth login для авторизации, затем в папке проекта: gh repo create my-project --public --source=. --push. Одна команда создаст репозиторий и отправит код.
Работа с ветками и обновление кода
Залить код один раз — половина дела. В реальной работе вы будете регулярно отправлять изменения. Цикл выглядит так: внесли правки → git add → git commit → git push. Если над проектом работаете не только вы, перед отправкой стоит выполнить git pull, чтобы забрать чужие изменения и избежать конфликтов.
Для новых функций принято создавать отдельные ветки, чтобы не ломать основную. Команда git checkout -b feature-name создаёт ветку и переключается на неё. После отправки такой ветки на GitHub появится предложение создать Pull Request — запрос на слияние изменений в main с возможностью код-ревью.
- 🌿 Одна ветка — одна задача: не смешивайте разные изменения в одном коммите.
- 🔄 Перед push делайте
git status, чтобы увидеть, что именно уйдёт на сервер. - 🧹 Слив ветку через Pull Request, удаляйте её — так репозиторий остаётся чистым.
Типичные ошибки при загрузке
Ошибка remote origin already exists означает, что удалённый репозиторий уже привязан. Решение: либо использовать существующую привязку, либо заменить адрес командой git remote set-url origin новый-url.
Ошибка failed to push some refs с пометкой non-fast-forward говорит о том, что на GitHub есть коммиты, которых нет у вас локально. Сначала выполните git pull --rebase origin main, разрешите возможные конфликты, и только потом повторяйте push.
Если GitHub отклоняет отправку из-за большого файла — проверьте, не попал ли в коммит архив, видео или бинарник. GitHub ограничивает размер отдельных файлов (для крупных объектов существует Git LFS). Удалить файл из истории поможет git rm --cached имя_файла с последующим новым коммитом.
Часто задаваемые вопросы
Можно ли залить код на GitHub без установки Git?
Да, через веб-интерфейс: на странице репозитория нажмите Add file → Upload files и перетащите файлы. Но для полноценной работы с версиями без локального Git не обойтись.
Как загрузить проект в уже существующий репозиторий с файлами?
Клонируйте репозиторий командой git clone URL, скопируйте свои файлы в полученную папку, затем выполните git add ., git commit и git push. Так история не разойдётся.
Почему GitHub просит пароль, но не принимает его?
Парольная авторизация через HTTPS отключена. Создайте Personal Access Token в настройках аккаунта и используйте его вместо пароля, либо настройте SSH-ключи.
Как удалить случайно загруженный файл с паролем?
Простого удаления коммитом недостаточно — файл останется в истории. Нужно переписать историю (например, через git filter-repo) и выполнить принудительный push. Сам пароль при этом считайте скомпрометированным и смените его.
Чем Private-репозиторий отличается от Public при загрузке кода?
Технически — ничем, команды идентичны. Разница только в видимости: приватный репозиторий виден вам и пользователям, которым вы выдали доступ.