git checkout tag, git pull не работает в ветке


133

Я клонировал репозиторий git, а затем проверил тег:

# git checkout 2.4.33 -b my_branch

Это нормально, но когда я пытаюсь запустить git pullсвою ветку, git выдает эту ошибку:

Информация об отслеживании для текущего филиала отсутствует. Пожалуйста, укажите, с какой ветвью вы хотите объединиться. Подробнее см. Git-pull (1).

git pull <remote> <branch>

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

git branch --set-upstream new origin/<branch>

Я хочу git pullобновить только основную ветку и оставить текущую ветку в покое (в любом случае это тег). Возможно ли что-то подобное?

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


Ответы:


114

Изменить: для более новых версий Git --set-upstream masterустарел, --set-upstream-toвместо этого вы должны использовать :

git branch --set-upstream-to=origin/master master

Как будет предложено, вы можете просто запустить:

git branch --set-upstream master origin/master

После этого вы можете просто запустить, git pullчтобы обновить свой код.


5
Это решило проблему. Но мне все еще нужно понять, как моя основная ветвь потеряла ссылку на origin. Я был на ветке и сделал git checkout master. Я не мог этого сделать, git pullпотому что ссылка на происхождение была потеряна. Теперь это работает. Спасибо!
Ариэль

'git branch --set-upstream-to = origin / master master my_branch' сработал для меня
Blue Clouds

90

У меня была такая же проблема, и я исправил ее с помощью этой команды:

$ git push -u origin master

Из файла справки -u в основном устанавливает значение по умолчанию для вытягиваний:

-u, --set-upstream`

  For every branch that is up to date or successfully pushed, add 
  upstream (tracking) reference, used by argument-less git-pull(1) and
  other commands. For more information, see branch.<name>.merge in 
  git-config(1).

48

Попробуйте эти команды:

git pull origin master
git push -u origin master

9

Вернитесь в основную ветку, используя

$ git checkout master

а затем запустите git pullоперацию

$ git pull origin/master

После этого вы можете снова переключиться на свой my_branch.


6
Это именно то, чего я пытаюсь избежать. Я хотел знать, есть ли «официальный» способ сделать это.
alesko

5

@alesko : невозможно сделать только git pullпосле оформления заказа только my_branchдля обновления masterветки.
Потому git pullчто также будет сливаться с текущей веткой -> в вашем сценарии сmy_branch

@Simon : это тоже толчок. это почему?

$ git branch -u origin/master
Branch master set up to track remote branch master from origin.

и в соответствии с документами:

-u <upstream>
  Set up <branchname>'s tracking information so <upstream> is considered  
  <branchname>'s upstream branch. If no <branchname> is specified,  
  then it defaults to the current branch.

4

Во-первых, убедитесь, что вы находитесь на правильной ветке.
Затем (только один раз):

git branch --track

После этого это снова работает:

git pull

4

У вас может быть несколько веток. И ваша текущая ветка не настроила свой восходящий поток в удаленном режиме.

Как это исправить:

git checkout branch_name
git branch --set-upstream-to=origin/remote_branch_name local_branch_name

например

// this set upstream of local branch develop to remote branch  origin/develop,
git branch --set-upstream-to=origin/develop develop

После этого, когда вы это сделаете git pull, он будет извлекать из указанной ветки.


3

Вы можете указать, какую ветку вы хотите вытянуть:

git pull origin master

Или вы можете настроить его так, чтобы ваша локальная мастер-ветка отслеживала мастер-ветку github как восходящий:

git branch --set-upstream-to=origin/master master
git pull

Это отслеживание веток настраивается для вас автоматически при клонировании хранилища (только для ветки по умолчанию), но если вы добавляете удаленное устройство в существующее хранилище, вам нужно настроить отслеживание самостоятельно. К счастью, совет, данный git, позволяет легко запомнить, как это сделать.

--set-upstream, по-видимому, устарел в git 1.9.x. В будущем вы захотите использовать что-то вроде

git branch -u origin/master

при условии, что вы уже проверили мастера. Если нет, git branch -u origin/master masterбудет работать


2

Попробуй это

git checkout master

git pull origin master

2
Это не совсем ответ на вопрос. Кроме того, хотя общепринятого ответа нет, наиболее подходящий вариант ответа на этот старый вопрос гораздо лучше
fejese

1

Вам необходимо настроить отслеживание (апстрим) для текущей ветки

git branch --set-upstream master origin/master

Уже устарело, вместо этого вы можете использовать флаг --track

git branch --track master origin/master

Мне также нравится ссылка на документ, который @casey замечает:

-u <upstream>
  Set up <branchname>'s tracking information so <upstream> is considered  
  <branchname>'s upstream branch. If no <branchname> is specified,  
  then it defaults to the current branch.

1

У меня сработало следующее: git branch --set-upstream-to = origin master. Когда я снова сделал попытку, я получил только обновления от мастера, и предупреждение исчезло.


1

Если, как и я, вам нужно делать это все время, вы можете настроить псевдоним, чтобы делать это автоматически, добавив следующее в ваш .gitconfigфайл:

[alias]
    set-upstream = !git branch --set-upstream-to=origin/`git symbolic-ref --short HEAD`

Когда вы увидите сообщение There is no tracking information..., просто запустите git set-upstream, а затем git pushснова.

Благодаря https://zarino.co.uk/post/git-set-upstream/


0

Чтобы просто загрузить обновления:

git fetch origin master

Однако это просто обновляет ссылку с именем origin/master. Лучший способ обновить ваш локальный master- это проверка / слияние, упомянутое в другом комментарии. Если вы можете гарантировать, что ваш локальный компьютер masterне отклонился от основной магистрали, которая origin/masterвключена, вы можете использовать git update-refдля сопоставления своего текущего masterс новой точкой, но это, вероятно, не лучшее решение для использования на регулярной основе ...


0

Эта команда устарела: git branch --set-upstream master origin/master

Итак, при попытке настроить отслеживание у меня сработала следующая команда:

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