Непонятное сообщение об ошибке от git


94

Я получил это сообщение от Git:

Вы просили извлечь из удаленного «origin», но не указали ветку. Поскольку это не настроенный по умолчанию пульт для вашей текущей ветки, вы должны указать ветку в командной строке.

Кто-нибудь может это объяснить? а главное как исправить?

Ответы:


94

Вы должны указать git, какую ветку вы хотите извлечь из удаленных репозиториев "origin".

Я думаю, вам нужна ветка по умолчанию (master), поэтому вам git pull origin masterследует исправить вашу проблему.

Смотрите git help branch, git help pullи git help fetch для получения дополнительной информации.


2
чтобы заставить его работать, мне пришлось проверить ветку «master» (ветка не была выбрана) и потянуть, что устранило проблему.
cinek

@cinek: Да, git pullизвлекает и объединяется с текущей веткой, поэтому его поведение полностью зависит от того, какая ветка извлечена, а с отсоединенной HEAD (ни одна ветка не извлечена), он не может знать, какую ветку вытащить.
Cascabel

@cinek: Я предполагал, что вы новичок в git, поэтому признаю, что вы были в полностью стандартном состоянии на ветке master, моя проблема :-).
p4bl0

86

Чтобы исправить это, если вы находитесь в masterветке и хотите получить masterветку с originпульта дистанционного управления, в достаточно новых версиях Git (1.8 или новее):

git branch -u origin/master master

(Аналогично для других веток и / или пультов.)

Если вы можете совместить это с толчком, это будет еще короче:

git push -u origin master

После этого обычный git pull/ git pushбудет делать то, что вы ожидаете.


Во время серии Git 1.7 git branchне было -uпереключателя (только git pushбыл), и вместо этого вам пришлось использовать гораздо дольше --set-upstream:

git branch --set-upstream master origin/master

Обратите внимание на обратные аргументы по сравнению с -u. Я не раз возился с этим заказом.


Все это, кстати, является сокращением для следующих действий, которые вы все еще можете делать явно:

git config branch.master.remote origin
git config branch.master.merge refs/heads/master

До версии 1.7 это нужно было делать так.


Я думаю, что команда вверху (по крайней мере, в моей версии Git) устанавливает исходную ветку с именем «origin» как «origin / master». Если ваша ветка локально называется "master", я думаю, вам нужно:git branch --set-upstream master origin/master
Эван Донован

Интересно, что эта -uопция недокументирована git branchв моей версии 1.8.5.3, что делает вашу документацию по ней еще более важной. И, как вы заметили, эта опция была недоступна в версии 1.7. *. Поскольку -uэто сокращение от --set-upstream, не следует ли изменить порядок его аргументов, как вы, --set-upstreamиз-за комментария @EvanDonovan?
hobs

Однако, когда я использую команду, которую вы показываете ( git branch -u origin/master master), она работает так, как ожидалось / предназначено для меня: «Мастер ветки настроен для отслеживания удаленного мастера ветки из источника».
hobs

1
@hobs: на самом деле это извращение Git. -uПереключатель на самом деле не короткая форма --set-upstream. Его порядок аргументов фактически обратный порядку для --set-upstream. Я думаю, что --set-upstream-to(обратите внимание на «-to») было введено только позднее, что на -uсамом деле является сокращенной формой.
Аристотель Пагальцис 01

Вот это да! Действительно сбивает с толку. Спасибо, что распутал это для меня.
hobs

3

Сообщение говорит именно о том, о чем идет речь. Ваша текущая ветка не связана (не отслеживает) ни с одной веткой в origin . Итак, git не знает, что тянуть.

Что делать? Это зависит от...

В большинстве обычной ситуации вы отработка некоторых местного филиала А который разветвленные от мастера , который клонировал происхождений «ы мастера. Обычный способ решить эту проблему - переключиться на master и pull, чтобы синхронизировать его с origin, а затем вернуться к xyz и rebase master.

Но в вашей ситуации вы можете захотеть сделать что-нибудь еще. Мы не можем знать этого, не зная подробностей о ваших ветках и пультах, а также о том, как вы собираетесь их использовать.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.