Git: qual é o controle remoto padrão configurado para ramificação?


192

Eu tenho um repositório bare remoto hub. Eu trabalho apenas no masterramo. A última frase desta mensagem de erro abaixo me faz pensar: Como descobrir qual é o "controle remoto padrão configurado para sua filial 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.

Respostas:


230

Rastrear a filial remota

Você pode especificar o repositório remoto padrão para empurrar e puxar usando a opção de trilha do git-branch. Você normalmente faria isso especificando a opção --track ao criar sua ramificação principal local, mas como ela já existe, atualizaremos a configuração manualmente da seguinte maneira:

Edite seu .git/config

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

Agora você pode simplesmente git push e git pull.

[ fonte ]


Isso também não seria definido se o OP o fizesse git pull hub master?
Ryan Bigg

@ Ryan Bigg: Não automaticamente, ou você sempre estragaria sua configuração.
cutuca

36
Por que editar um arquivo de configuração quando existem comandos git por esse motivo?
urschrei

43
git branch local_branch --set-a montante remoto / remote_branch (ou quando empurrando, como detalhado abaixo)
urschrei

25
@scragz: De jeito nenhum! a abordagem de comando garante que seu .gitconfig seja deixado em um estado significativo.
SMCI

260

Você pode fazê-lo de maneira mais simples, garantindo que você .gitconfigfique em um estado significativo:

Usando o Git versão v1.8.0 e superior

git push -u hub master ao empurrar, ou:
git branch -u hub/master

OU

(Isso configurará o controle remoto para a filial com check-out atualmentehub/master )
git branch --set-upstream-to hub/master

OU

(Isso configurará o controle remoto para a ramificação nomeada branch_namecomo hub/master)
git branch branch_name --set-upstream-to hub/master

Se você estiver usando v1.7.xou mais cedo

você deve usar --set-upstream:
git branch --set-upstream master hub/master


3
Para quem se perguntando: o segundo comando pode ser usado para ramos existentes
Eric Hu

1
@ eric-hu conforme detalhado na minha resposta aqui: stackoverflow.com/questions/4878249/...
urschrei

1
O set-upstream[-to]comando altera o controle remoto atualmente configurado. O pôster original perguntou sobre o controle remoto configurado padrão . Certamente esse não é o mesmo conceito?
Steve jarros

1
Cada filial possui um controle remoto configurado no momento , especificando qual filial nesse controle remoto corresponde à filial local. O controle remoto configurado padrão determina qual ramificação é empurrada ou puxada se você não especificar uma explicitamente. Esta resposta define apenas a atual . A resposta aceita (edição manual) também permite definir a resposta padrão . Alguém conhece um comando que evita a edição manual?
precisa

1
--set-upstream-tofez exatamente as mesmas alterações .git/configsugeridas por @scragz em sua resposta .
Strah


-1

o comando para obter o push remoto eficaz para a ramificação, por exemplo, master, é:

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

Aqui está o porquê (da saída "man git config"):

branch.name.remote [...] informa ao git fetch e git push que controle remoto buscar de / push para [...] [for push] pode ser substituído por remote.pushDefault (para todos os ramos) [e] para o ramificação atual [..] substituída ainda por branch.name.pushRemote [...]

Por alguma razão, "man git push" fala apenas sobre branch.name.remote (mesmo que tenha a menor precedência dos três) + afirma erroneamente que, se não estiver definido, envie os padrões para a origem - não, é apenas quando você clona um repo, o branch.name.remote está definido como origem, mas se você remover essa configuração, o git push falhará, mesmo que você ainda tenha a origem remota


Esta pergunta já foi respondida com uma resposta mais útil.
Austin Schäfer
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.