Для текущей ветки нет информации об отслеживании


581

Я использую github с относительно короткого периода, и я всегда использовал клиента для выполнения коммитов и извлечений. Вчера я решил попробовать его из git bash, и я успешно создал новый репозиторий и зафиксировал файлы.

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

There is no tracking information for the current branch.
    Please specify which branch you want to merge with.
    See git-pull(1) for details

    git pull <remote> <branch>

If you wish to set tracking information for this branch you can do so with:

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

единственный участник этого репо - это я, и нет никаких веток (только мастер). Я на Windows, и я выполнил тягу из Git Bash:

введите описание изображения здесь

git status:

$ git status
# On branch master
nothing to commit, working directory clean

гит ветка:

$ git branch
* master

Что я делаю неправильно?


Хорошо, а как насчет git remote -v? Что это говорит?
Крисвелл


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

С Git 2.24, Q4 2019, git pull --set-upstream-to=origin/master masterвозможно. Смотрите мой ответ ниже
VonC

Ответы:


951

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

git pull origin master

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

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

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


3
идеально! это сработало. так что же случилось, что не было "ветки по умолчанию" для "git pull" по умолчанию? вот почему произошла ошибка?
valerio0999

16
--set-upstream устарела в git 1.9.x, по-видимому. В дальнейшем вы захотите использовать что-то вроде git branch -u origin/master, если вы уже проверили мастер. Если нет, git branch -u origin/master masterбудет работать.
Барт, прочитанный

5
@BartRead обновил его, чтобы использовать новый более понятный --set-upstream-to=синтаксис. (что является заменой --set-upstream)
ComputerDruid

61
это похоже на печальное положение дел - нам действительно нужно устанавливать это вручную для каждой ветви? Почему мы не можем просто установить origin в качестве удаленного по умолчанию, а затем при каждом push / pull по умолчанию использовать ветвь в origin с тем же именем? это так сложно?
Александр Миллс

4
Ах, ключевым моментом для меня было то, что если вы уроните и заново создадите пульт, трекинг, установленный оригиналом fetch, будет утерян. Отсюда необходимость настроить его снова. :)
Бен

42

Смотрите: тег git checkout, сбой git pull в ветке

Если, как и я, вам нужно делать это все время, вы можете настроить псевдоним, чтобы делать это автоматически, добавив следующее в ваш .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/


1
Вот способ добавить его в глобальный .gitconfigв одной строке (может быть изменен для локальных или других конфигов соответственно):git config --global alias.set-upstream '!git branch --set-upstream-to=origin/$(git symbolic-ref --short HEAD)'
Дэнни

17

Ответ ComputerDruid великолепен, но я не думаю, что необходимо устанавливать upstream вручную, если вы не хотите. Я добавляю этот ответ, потому что люди могут подумать, что это необходимый шаг.

Эта ошибка исчезнет, ​​если вы укажете пульт, который вы хотите вытащить, как показано ниже:

git pull origin master

Обратите внимание, что originэто имя удаленного и masterэто имя ветви.


1) Как проверить имя пульта

git remote -v

2) Как посмотреть, какие ветки доступны в репозитории.

git branch -r

1
Лучший ответ для меня, спасибо!
Бахман.

7

Я часто сталкиваюсь с этим точным сообщением, потому что я создаю локальные филиалы git checkout -b <feature-branch-name>без предварительного создания удаленной ветви.

После того, как вся работа была завершена и зафиксирована локально, было исправлено, git push -uчто создало удаленную ветку, подтолкнуло всю мою работу, а затем URL-адрес запроса на слияние.


1
для чего бы это ни стоило, мне пришлось бежать git push -u origin <my-feature-branch-name>, чтобы создать удаленную ветку и запустить свою работу
Donnie C

6

Я пробовал приведенные выше примеры и не смог заставить их синхронизироваться с веткой (не главной), которую я создал на другом компьютере. Для фона я создал этот репозиторий на компьютере A (git v 1.8), а затем клонировал репозиторий на компьютер B (git 2.14). Я внес все свои изменения в комп B, но когда я попытался перенести изменения на компьютер, AI не смог этого сделать, получив ту же ошибку выше. Подобно приведенным выше решениям, мне пришлось сделать:

git branch --set-upstream-to=origin/<my_repository_name> 
git pull

немного отличается, но, надеюсь, помогает кому-то


Это сработало для меня; Я также использовал ветку non-master, которая была настроена на другом компьютере. Используя эту команду в Git Bash, я смог получить свои изменения :)
Novastorm





1

То же самое случилось со мной раньше, когда я создал новую ветку git, не выдвигая ее в начало.

Попробуйте сначала выполнить эти две строки:

git checkout -b name_of_new_branch # create the new branch
git push origin name_of_new_branch # push the branch to github

Затем:

git pull origin name_of_new_branch

Это должно быть хорошо сейчас!


1

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

  1. Потяните с конкретным названием ветви

мастер происхождения git pull

  1. Или вы можете конкретную ветку, чтобы отслеживать в местном филиале.

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


0

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


2
Всегда полезно добавить некоторые пояснения к вашему ответу, чтобы сделать его более четким и понятным. Пожалуйста, прочитайте stackoverflow.com/help/how-to-answer .
32

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