Сообщение вверх по течению при переключении обратно в пустую ветвь?

Моя версия git Git -1.9.4-preview20140611 Раньше я клонировал пустой репозиторий оригинала git. Репозиторий клонирован, но со следующим сообщением

warning: вы, похоже, клонировали пустой репозиторий. Проверка подключения... выполнена.

Затем скопирован файл .gitIgnore, который был в другом хранилище основных проектов git и передал его локальному хозяину. Этот файл использовался нами много раз. Это кажется прекрасным. У нас есть стандартный файл .gitIgnore для всех наших проектов. Это было создано как часть лучших практик.

Затем создала новую ветвь и скопировала некоторый код в физическом местоположении, где находится локальная репозитория git

git checkout -b FromCC

Добавлен код и зафиксирован в этой ветке.

git add --all
git commit -M "Blah"

Все эти операции успешны.

Моя цель - объединить эти изменения в конечном итоге в локальную ветвь мастера.

Далее я

git checkout master

и получите следующее сообщение.

Ваша ветка основана на "origin/master", но вверх по течению нет. (используйте "git branch --unset-upstream" для исправления)

Что означает это сообщение? Почему бы восходящий поток "уйти"?

Интересное наблюдение: Я повторил тот же процесс с тем же главным хранилищем git сегодня. На этот раз репозиторий git не был пустым. У него был файл .gitIgnore. На этот раз указанное выше сообщение не появилось.

Ответ 1

Это не восходящий репозиторий (сам origin), а конкретная ветка, которую вы клонировали (master по происхождению), которая отсутствует.

Кроме того, сообщение git вводит в заблуждение: ветвь master по происхождению не исчезла, ее там никогда не было. Когда вы клонировали пустой репозиторий, у него вообще не было веток. У нее не было никаких отделений. Следовательно, ваш локальный master, который был установлен для отслеживания origin/master, был (есть) отслеживание ветки, которая (не) существует.

Это сообщение больше подходит для такой ситуации:

$ git clone ...
$ git checkout featureX   # track some feature branch
[go away for a week, come back]
$ git fetch -p            # update remote branches

где на этой неделе вы отсутствовали, ветвь featureX была удалена (предположительно, объединена в свою линию разработки, а затем больше не нужна). На этом этапе вы находитесь на локальной ветке, featureX, чтобы отслеживать удаленную ветвь origin/featureX, но больше нет origin/featureX.

В этом случае у вас есть локальная ветвь master отслеживание origin/master, когда еще нет origin/master. После его создания (через push, который делает хранилище не пустым) проблема исчезнет. Это произошло только потому, что по умолчанию вы начинаете с master, даже если пульт пуст и на самом деле еще не имеет master.

Ответ 2

Я столкнулся с этим после создания полностью пустого репо на github и git clone d для local. В том числе предупреждение о пустом репо. Затем commit для вновь созданного локального файла дало сообщение о том, что "апстрим ушел".

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

git push -u origin master

  • Это переносит локально существующего мастера в удаленное хранилище github.
  • Переключатель -u для push устанавливает восходящий поток (длинная версия --set -u pstream) в набор на github.

Сообщение пропало, так как главная ветка теперь также доступна на удаленном репо.

Ответ 3

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