Git: qual é o remoto configurado padrão para branch?
-
27-10-2019 - |
Pergunta
Eu tenho um hub
de repositório vazio e remoto.Eu trabalho apenas no ramo master
.
A última frase da mensagem de erro abaixo me faz pensar: Como faço para descobrir qual é o "controle remoto configurado por padrão para seu branch atual" ?E como faço para configurá-lo?
[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.
Solução
Rastreie a filial remota
Você pode especificar o repositório remoto padrão para fazer push e pull usando a opção track do git-branch.Você normalmente faria isso especificando a opção --track ao criar seu branch master local, mas como ele já existe, vamos apenas atualizar a configuração manualmente assim:
Edite o seu .git/config
[branch "master"]
remote = origin
merge = refs/heads/master
Agora você pode simplesmente fazer git push e git pull.
[ fonte ]
Outras dicas
Você pode fazer isso de forma mais simples, garantindo que seu .gitconfig
seja deixado em um estado significativo:
Usando Git versão v1.8.0 e superior
git push -u hub master
ao enviar, ou:
git branch -u hub/master
OU
(Isso definirá o controle remoto para o branch atualmente com check-out como hub/master
)
git branch --set-upstream-to hub/master
OU
(Isso definirá o controle remoto para o branch chamado branch_name
como hub/master
)
git branch branch_name --set-upstream-to hub/master
Se você estiver usando v1.7.x
ou anterior
você deve usar --set-upstream
:
git branch --set-upstream master hub/master
Para fins de integridade: as respostas anteriores dizem como configurar o branch upstream, mas não como vê-lo.
Existem algumas maneiras de fazer isso:
git branch -vv
mostra essa informação para todos os ramos.(formatado em azul na maioria dos terminais)
cat .git/config
mostra isso também.
Para referência:
o comando para obter o push remote efetivo para o branch, por exemplo, master, é:
git config branch.master.pushRemote ||git config remote.pushDefault ||git config branch.master.remote
Este é o motivo (da saída "man git config"):
<✓branch.name.remote [...] diz a git fetch e git push qual remoto buscar / push para [...] [para push] pode ser substituído por remote.pushDefault (para todos os branches) [e] para o branch atual [..] posteriormente substituído por branch.name.pushRemote [...]
Por alguma razão, "man git push" apenas fala sobre branch.name.remote (mesmo que tenha a menor precedência dos três) + afirma erroneamente que se não estiver definido, o push padrão para a origem - não, é que quando você clona um repo, branch.name.remote é definido como origin, mas se você remover essa configuração, o git push falhará, mesmo que você ainda tenha o remoto de origem