Другое

Исправление ошибки 'no tracking information' при git pull

Узнайте, как исправить ошибку 'no tracking information for the current branch' в Git. Полное руководство по настройке отслеживания upstream для успешного выполнения git pull на Windows и других системах.

Я новичок в Git и использовал клиент 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>

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

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

Что я делаю неправильно с отслеживанием веток Git, и как я могу решить эту проблему, чтобы успешно пуллить изменения из удалённого репозитория?

Ошибка отсутствия информации отслеживания в Git

Ошибка, с которой вы столкнулись, возникает потому, что ваша локальная ветка master не имеет настроенного отслеживания upstream, что означает, что Git не знает, с какой удаленной ветки нужно делать pull. Обычно это происходит, когда вы создаете новую локальную ветку, не установив ее связь с соответствующей удаленной веткой. Чтобы исправить это, вам нужно настроить информацию об отслеживании, чтобы Git знал, что нужно делать pull из ветки origin/master.

Содержание

Основы отслеживания веток в Git

Отслеживание веток в Git — это механизм, который связывает ваши локальные ветки с их удаленными аналогами. Когда вы создаете локальную ветку, Git автоматически не знает, с какой удаленной веткой ее синхронизировать, если вы явно не настроите это отношение.

Как объясняется в документации Git, имена веток, отслеживающих удаленные репозитории, имеют форму <remote>/<branch>. Например, если вы хотите увидеть, как выглядела ветка master на вашем удаленном репозитории origin в последний раз при общении с ним, вы должны проверить ветку origin/master.

Информация об отслеживании хранится в вашем файле .git/config и сообщает Git:

  • С каким удаленным репозиторием общаться (обычно origin)
  • Какую ветку на этом удаленном репозитории использовать для pull и push

Почему возникает эта ошибка

Эта ошибка возникает конкретно потому, что:

  1. Ваша локальная ветка master не имеет настроенного отслеживания upstream
  2. Когда вы выполняете git pull, Git не знает, с какой удаленной веткой нужно объединять изменения
  3. Сообщение об ошибке дает рекомендации, предлагая либо указать ветку вручную, либо настроить отслеживание

Согласно Stack Overflow, почти всегда вы хотите делать pull из ветки на сервере origin с тем же именем, что и у вашей локальной ветки. Проблема возникает потому, что вы еще не установили эту связь.


Решение 1: Настройка отслеживания upstream

Наиболее прямое решение — настроить отслеживание upstream для вашей текущей ветки с помощью одной из этих команд:

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

Или более короткая версия:

bash
git branch -u origin/master

Как объясняется на GeeksforGeeks, замените <remote_branch> и <local_branch> на конкретные имена ваших веток. Эти команды предполагают, что ваш удаленный репозиторий называется “origin”.

Эта команда добавляет следующее в ваш файл проекта .git/config:

[branch "master"]
    remote = origin
    merge = refs/heads/master

Sal Ferrarello подтверждает, что при выполнении этой команды Git настраивается на автоматическое использование одноименной ветки на сервере origin, что именно то, что вам нужно.


Решение 2: Настройка отслеживания при push

Если вы собираетесь сделать push ваших изменений впервые, вы можете настроить отслеживание во время push с помощью флага -u (или --set-upstream):

bash
git push -u origin master

Эта единственная команда выполняет три действия:

  1. Пушит вашу локальную ветку master в удаленный репозиторий
  2. Настраивает отслеживание между локальной master и origin/master
  3. Устанавливает origin как удаленный репозиторий по умолчанию для будущих push

Согласно Reddit, вы можете использовать флаг -u с git push, чтобы Git сохранил информацию об отслеживании. Это нужно сделать только один раз.


Решение 3: Ручной git pull с указанием ветки

Если вы предпочитаете не настраивать отслеживание постоянно, вы можете явно указать удаленный репозиторий и ветку в команде pull:

bash
git pull origin master

Это явно указывает Git делать pull из ветки master на удаленном репозитории origin. Однако этот подход не устанавливает отношение отслеживания, поэтому вам придется указывать и удаленный репозиторий, и ветку каждый раз, когда вы хотите сделать pull.

Сообщение об ошибке само предлагает этот подход: git pull


Предотвращение будущих проблем

Чтобы избежать этой проблемы в будущем, вот лучшие практики:

  1. Используйте --track при создании новых веток: При создании новых веток используйте флаг --track:

    bash
    git checkout --track origin/feature-branch
    
  2. Используйте флаг -u при push: Всегда используйте git push -u origin <branch> при первом push новых веток.

  3. Настройте Git на автоматическую установку upstream: Вы можете настроить Git на автоматическое установку отслеживания upstream при push новой ветки, установив git config --global push.default current или git config --global branch.autoSetupMerge true.

  4. Проверяйте статус отслеживания веток: Используйте git branch -vv, чтобы увидеть, какие ветки отслеживают какие удаленные ветки и их текущий статус.


Шаги проверки

После настройки отслеживания проверьте, что оно работает правильно:

  1. Проверьте конфигурацию отслеживания:

    bash
    git branch -vv
    

    Вы должны увидеть свою ветку master с информацией об отслеживании, например:

    * master 376438d [origin/master]
    
  2. Протестируйте pull:

    bash
    git pull
    

    Теперь это должно работать без необходимости указывать удаленный репозиторий и ветку.

  3. Проверьте ваш файл config (опционально):

    bash
    cat .git/config
    

    Ищите раздел [branch "master"] с настройками remote и merge.

Как предлагает Stack Overflow, настройка отслеживания делает ваш Git-рабочий процесс гораздо более плавным, позволяя использовать простые команды вроде git pull и git push без необходимости указывать удаленный репозиторий и ветку каждый раз.

Источники

  1. Git - Remote Branches - Official Documentation
  2. How to Fix Git Error: There is No Tracking Information for the Current Branch - GeeksforGeeks
  3. There is no tracking information for the current branch. - Sal Ferrarello
  4. Make an existing Git branch track a remote branch? - Stack Overflow
  5. Recurring ‘no tracking info for current branch’ - Reddit

Заключение

  • Ошибка “нет информации об отслеживании” возникает, когда ваша локальная ветка не знает, с какой удаленной веткой синхронизироваться
  • Исправьте это, выполнив git branch --set-upstream-to=origin/master или git branch -u origin/master
  • Для будущих push используйте git push -u origin master для автоматической настройки отслеживания
  • Используйте git branch -vv для проверки правильной настройки отслеживания
  • Рассмотрите возможность настройки авто-настройки слияния в Git для предотвращения этой проблемы при создании новых веток

Установление правильного отслеживания веток сделает ваш Git-рабочий процесс гораздо более эффективным, позволяя использовать простые команды вроде git pull и git push без необходимости указывать имена удаленных репозиториев и ветей каждый раз.

Авторы
Проверено модерацией
Модерация