Mensagem de erro confusa do git

90

Recebi esta mensagem do Git:

Você pediu para puxar da 'origem' remota, mas não especificou uma ramificação. Como este não é o controle remoto configurado por padrão para sua ramificação atual, você deve especificar uma ramificação na linha de comando.

Alguém pode explicar isso? e mais importante como consertá-lo?

cinek
fonte

Respostas:

89

Você tem que dizer ao git qual branch você deseja extrair dos repositórios remotos "origin".

Eu acho que você quer o branch padrão (master) então git pull origin master deve resolver seu problema.

Veja git help branch, git help pulle git help fetch para mais informações.

p4bl0
fonte
2
para fazer funcionar eu tive que verificar o branch "master" (não havia nenhum branch selecionado) e puxar, que resolveu o problema.
cinek
@cinek: Sim, git pullextrai e mescla com o branch atual, então seu comportamento depende completamente de qual branch é retirado, e com um HEAD desanexado (nenhum branch verificado), não há como saber qual branch retirar.
Cascabel
@cinek: Suponho que você seja novo no git, então admito que você estava em um estado totalmente padrão no branch master, meu mal :-).
p4bl0
86

Para consertar, supondo que você esteja no masterbranch e queira puxá master-lo do originremoto, em novas versões do Git (1.8 ou mais recentes):

git branch -u origin/master master

(Analogamente para outras filiais e / ou remotos.)

Se você pode combinar isso com um push, é ainda mais curto:

git push -u origin master

Depois disso, um plano git pull/ git pushfará o que você espera.


Durante a série Git 1.7, git branchnão tinha o -uswitch (apenas git pushtinha) e, em vez disso, você teve que usar o muito mais longo --set-upstream:

git branch --set-upstream master origin/master

Observe a inversão de argumentos em comparação com -u. Eu me atrapalhei com esse pedido mais de uma vez.


Todos esses, a propósito, são atalhos para fazer o seguinte, o que você ainda pode fazer explicitamente:

git config branch.master.remote origin
git config branch.master.merge refs/heads/master

Antes do 1.7, você tinha que fazer dessa maneira.

Aristotle Pagaltzis
fonte
Eu acho que o comando no topo (pelo menos na minha versão do Git) define o upstream de um branch chamado "origin" para ser "origin / master". Se sua filial local for chamada de "mestre", acho que você gostaria de:git branch --set-upstream master origin/master
Evan Donovan,
Curiosamente, a -uopção não está documentada git branchna minha versão, 1.8.5.3, tornando sua documentação aqui ainda mais importante. E, como você pode notar, a opção não estava disponível na versão 1.7. *. Visto que -ué a abreviação de --set-upstream, a ordem de seus argumentos não deveria ser invertida como você fez --set-upstreamdevido ao comentário de @EvanDonovan?
horas de
No entanto, quando uso o comando que você mostra ( git branch -u origin/master master), ele funciona conforme o esperado / pretendido para mim: "Branch master configurado para rastrear o branch master remoto desde a origem."
horas de
1
@hobs: isso é realmente uma perversidade do Git. Na -uverdade, a opção não é a forma abreviada de --set-upstream. Sua ordem de argumentos é efetivamente invertida da ordem para --set-upstream. Acho que foi só mais tarde que --set-upstream-to(observe o “-to”) foi introduzido, que é o que -uagora é na verdade a forma abreviada de.
Aristóteles Pagaltzis
Uau! Realmente confuso. Obrigado por desvendar isso para mim.
horas
3

A mensagem diz exatamente do que se trata. Sua filial atual não está associada (não está rastreando) nenhuma filial na origem . Então git não sabe o que puxar.

O que fazer? Depende...

Na maioria das situações usuais, você está trabalhando em algum branch local xyz que se ramificou do master que foi clonado do master da origem . A maneira usual de resolver isso é mudar para master e puxar para sincronizá-lo com a origem e depois voltar para xyz e rebase master.

Mas, na sua situação, você pode querer fazer outra coisa. Não podemos saber sem saber os detalhes de suas filiais e controles remotos e como você pretende usá-los.

Tomek Szpakowicz
fonte