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

94

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

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

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

синек
источник

Ответы:

94

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

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

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

p4bl0
источник
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.

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

Томек Шпакович
источник