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 не удастся, даже если у вас все еще есть удаленный источник