@romicohen
Системный Архитектор

Делаю 'git push -u' — получаю 'fatal: Текущая ветка some-branch не имеет вышестоящей ветки' — как исправить и почему такое?

Полный текст:

$ git push -u
fatal: Текущая ветка some-branch не имеет вышестоящей ветки.
Чтобы отправить текущую ветку и установить внешнюю ветку как вышестоящую для этой ветки, используйте

    git push --set-upstream origin some-branch


Но ведь git push -u - это как раз и есть синоним для git push --set-upstream origin some-branch - разве нет?

Что вообще происходит? -)
  • Вопрос задан
  • 4241 просмотр
Решения вопроса 1
sergey-kuznetsov
@sergey-kuznetsov Куратор тега Git
Автоматизатор
Команда push требует чтобы вы сообщили гиту куда отправить и что отправить: git push <remote_repo> <local_branch>
Если только ранее это ещё не было сделано с -u.
Иначе вылезет ваша ошибка
➜ git push -u -v
fatal: The current branch root has no upstream branch.
To push the current branch and set the remote as upstream, use

git push --set-upstream origin root

To have this happen automatically for branches without a tracking
upstream, see 'push.autoSetupRemote' in 'git help config'.

Но можно включить режим автоматической привязки
git config push.autoSetupRemote true

Тогда простой git push даже без -u будет текущую новую ветку отправлять в remote origin с таким же именем ветки и автоматически связывать локальную и внешнюю ветку.

Почему сработало на другом компе?
Предположу что на другом компьютере git pull -u сработал потому, что он там ранее уже выполнялся с полными параметрами. Затем на гитхабе ветку удалили, но локальный репозиторий связь всё ещё «помнил»
Ситуацию бы прояснил вывод команды git branch -vv
* main        4e0c267 Commit Message
  some-branch 4e0c267 [origin/some-branch: отсутствует] Commit Message

Так показывается ситуация, когда связь есть, но внешней ветки уже нет.
Но предварительно нужно скачать обновления через git fetch --prune -v
только так локальный репозиторий узнает что связанная ветка удалена (отсутствует)

Если я переключусь на ветку some-branch и напишу git push, то гит отправит ветку в на прежнее место и тем самым восстановит её на гитхабе.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
gzhegow
@gzhegow
aka "ОбнимиБизнесмена"
У тебя на локале нычка (ветка) есть, а куда качать оно не знает. Set upstream вяжет локал и сервак. Просто минус u надо еще указать куда. Дословно читать "пушни изменения с той ветки где я нахожусь на сервер по имени орижин и запомни что моя ветка текущая связана с серваком с веткой такойто и следующий раз не спрашивай"
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы