Исправление ошибки '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
- Почему возникает эта ошибка
- Решение 1: Настройка отслеживания upstream
- Решение 2: Настройка отслеживания при push
- Решение 3: Ручной git pull с указанием ветки
- Предотвращение будущих проблем
- Шаги проверки
Основы отслеживания веток в Git
Отслеживание веток в Git — это механизм, который связывает ваши локальные ветки с их удаленными аналогами. Когда вы создаете локальную ветку, Git автоматически не знает, с какой удаленной веткой ее синхронизировать, если вы явно не настроите это отношение.
Как объясняется в документации Git, имена веток, отслеживающих удаленные репозитории, имеют форму <remote>/<branch>. Например, если вы хотите увидеть, как выглядела ветка master на вашем удаленном репозитории origin в последний раз при общении с ним, вы должны проверить ветку origin/master.
Информация об отслеживании хранится в вашем файле .git/config и сообщает Git:
- С каким удаленным репозиторием общаться (обычно
origin) - Какую ветку на этом удаленном репозитории использовать для pull и push
Почему возникает эта ошибка
Эта ошибка возникает конкретно потому, что:
- Ваша локальная ветка
masterне имеет настроенного отслеживания upstream - Когда вы выполняете
git pull, Git не знает, с какой удаленной веткой нужно объединять изменения - Сообщение об ошибке дает рекомендации, предлагая либо указать ветку вручную, либо настроить отслеживание
Согласно Stack Overflow, почти всегда вы хотите делать pull из ветки на сервере origin с тем же именем, что и у вашей локальной ветки. Проблема возникает потому, что вы еще не установили эту связь.
Решение 1: Настройка отслеживания upstream
Наиболее прямое решение — настроить отслеживание upstream для вашей текущей ветки с помощью одной из этих команд:
git branch --set-upstream-to=origin/master
Или более короткая версия:
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):
git push -u origin master
Эта единственная команда выполняет три действия:
- Пушит вашу локальную ветку master в удаленный репозиторий
- Настраивает отслеживание между локальной master и origin/master
- Устанавливает origin как удаленный репозиторий по умолчанию для будущих push
Согласно Reddit, вы можете использовать флаг -u с git push, чтобы Git сохранил информацию об отслеживании. Это нужно сделать только один раз.
Решение 3: Ручной git pull с указанием ветки
Если вы предпочитаете не настраивать отслеживание постоянно, вы можете явно указать удаленный репозиторий и ветку в команде pull:
git pull origin master
Это явно указывает Git делать pull из ветки master на удаленном репозитории origin. Однако этот подход не устанавливает отношение отслеживания, поэтому вам придется указывать и удаленный репозиторий, и ветку каждый раз, когда вы хотите сделать pull.
Сообщение об ошибке само предлагает этот подход: git pull
Предотвращение будущих проблем
Чтобы избежать этой проблемы в будущем, вот лучшие практики:
-
Используйте
--trackпри создании новых веток: При создании новых веток используйте флаг--track:bashgit checkout --track origin/feature-branch
-
Используйте флаг
-uпри push: Всегда используйтеgit push -u origin <branch>при первом push новых веток. -
Настройте Git на автоматическую установку upstream: Вы можете настроить Git на автоматическое установку отслеживания upstream при push новой ветки, установив
git config --global push.default currentилиgit config --global branch.autoSetupMerge true. -
Проверяйте статус отслеживания веток: Используйте
git branch -vv, чтобы увидеть, какие ветки отслеживают какие удаленные ветки и их текущий статус.
Шаги проверки
После настройки отслеживания проверьте, что оно работает правильно:
-
Проверьте конфигурацию отслеживания:
bashgit branch -vv
Вы должны увидеть свою ветку master с информацией об отслеживании, например:
* master 376438d [origin/master] -
Протестируйте pull:
bashgit pull
Теперь это должно работать без необходимости указывать удаленный репозиторий и ветку.
-
Проверьте ваш файл config (опционально):
bashcat .git/configИщите раздел
[branch "master"]с настройками remote и merge.
Как предлагает Stack Overflow, настройка отслеживания делает ваш Git-рабочий процесс гораздо более плавным, позволяя использовать простые команды вроде git pull и git push без необходимости указывать удаленный репозиторий и ветку каждый раз.
Источники
- Git - Remote Branches - Official Documentation
- How to Fix Git Error: There is No Tracking Information for the Current Branch - GeeksforGeeks
- There is no tracking information for the current branch. - Sal Ferrarello
- Make an existing Git branch track a remote branch? - Stack Overflow
- 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 без необходимости указывать имена удаленных репозиториев и ветей каждый раз.