Git: который является настроенным по умолчанию удаленным для ветки?

У меня есть удаленный голый репозиторий hub. Я работаю только в master ветке. Последнее предложение этого сообщения об ошибке ниже заставляет меня задуматься: как мне узнать, какой "удаленный по умолчанию настроен для вашей текущей ветки"? И как мне это установить?

[myserver]~/progs $ git remote -v
hub     ~/sitehub/progs.git/ (fetch)
hub     ~/sitehub/progs.git/ (push)

[myserver]~/progs $ git branch -r
  hub/master

[myserver]~/progs $ cat .git/HEAD
ref: refs/heads/master

[myserver]~/progs $ git pull hub
You asked to pull from the remote 'hub', but did not specify
a branch. Because this is not the default configured remote
for your current branch, you must specify a branch on the command line.

Ответ 1

Отслеживание удаленной ветки

Вы можете указать удаленный репозиторий по умолчанию для нажатия и вытягивания с использованием опции git -branchs track. Обычно вы делаете это, указав опцию --track при создании локальной ветки хозяина, но поскольку она уже существует, просто обновите конфигурацию вручную так:

Измените свой .git/config

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

Теперь вы можете просто нажать git и git pull.

[источник]

Ответ 2

Вы можете сделать это проще, гарантируя, что ваш .gitconfig останется в значимом состоянии:

Использование Git версии v1.8.0 и выше

git push -u hub master при нажатии или:
git branch -u hub/master

ИЛИ ЖЕ

(Это установит пульт дистанционного управления для текущей извлеченной ветки на hub/master)
git branch --set-upstream-to hub/master

ИЛИ ЖЕ

(Это установит для удаленного ветки с именем branch_name значение hub/master)
git branch branch_name --set-upstream-to hub/master

Если вы используете v1.7.x или ранее

Вы должны использовать --set-upstream:
git branch --set-upstream master hub/master

Ответ 3

Для полноты: в предыдущих ответах рассказывается, как установить ветвь вверх по течению, но не как ее видеть.

Есть несколько способов сделать это:

git branch -vv показывает эту информацию для всех ветвей. (отформатировано синим цветом в большинстве терминалов)

cat .git/config показывает это также.

Для справки:

Ответ 4

Команда для получения эффективного push-сообщения для ветки, например, master, выглядит так:

git config branch.master.pushRemote || git config remote.pushDefault || git config branch.master.remote

Вот почему (из вывода "man git config"):

branch.name.remote [...] сообщает git fetch и git push, какой удаленный выбор из /push to [...] [для push] может быть переопределен с помощью remote.pushDefault (для всех ветвей) [и] для текущая ветка [..] далее переопределена branch.name.pushRemote [...]

По какой-то причине "man git push" говорит только о branch.name.remote (даже если он имеет наименьший приоритет из трех) + также ошибочно заявляет, что если он не установлен, push по умолчанию устанавливается на origin - это не так, он просто, когда вы клонируете репозиторий, branch.name.remote устанавливается в origin, но если вы удалите этот параметр, git push не удастся, даже если у вас все еще есть удаленный источник