tag de checkout do git, o pull do git falha na ramificação


133

Eu clonei um repositório git e depois fiz check-out de uma tag:

# git checkout 2.4.33 -b my_branch

Isso está bom, mas quando tento executar git pullno meu ramo, o git cospe esse erro:

Não há informações de rastreamento para a filial atual. Especifique com qual filial você deseja mesclar. Veja git-pull (1) para detalhes

git pull <remote> <branch>

Se você deseja definir informações de rastreamento para esse ramo, pode fazê-lo com:

git branch --set-upstream new origin/<branch>

Eu quero git pullatualizar apenas o ramo mestre e deixar meu ramo atual em paz (é uma marca de qualquer maneira). É algo assim possível?

A razão pela qual eu preciso disso é que tenho um script automático que sempre git puxa o repositório e, é claro, falha por causa do erro acima ..


Respostas:


114

Editar: para versões mais recentes do Git, --set-upstream masterfoi preterido, você deve usar --set-upstream-to:

git branch --set-upstream-to=origin/master master

Como solicitado, você pode simplesmente executar:

git branch --set-upstream master origin/master

Depois disso, você pode simplesmente executar git pullpara atualizar seu código.


5
Isso resolveu o problema. Mas ainda preciso entender como minha ramificação principal perdeu a referência à origem. Eu estava em um galho e fiz git checkout master. Não pude fazer git pullporque a referência à origem foi perdida. Agora funciona. Obrigado!
Ariel

'git branch --set-montante-to = origem / master mestre my_branch' funcionou para mim
Nuvens azuis

90

Eu tive o mesmo problema e o corrigi com este comando:

$ git push -u origin master

No arquivo de ajuda, o -u basicamente define o padrão para pull:

-u, --set-upstream`

  For every branch that is up to date or successfully pushed, add 
  upstream (tracking) reference, used by argument-less git-pull(1) and
  other commands. For more information, see branch.<name>.merge in 
  git-config(1).

48

Experimente estes comandos:

git pull origin master
git push -u origin master

9

Volte ao ramo principal usando

$ git checkout master

e depois execute a git pulloperação

$ git pull origin/master

Depois, você pode voltar ao seu my_branchnovamente.


6
É exatamente isso que estou tentando evitar. Eu queria saber se existe uma maneira "oficial" de fazer isso.
Alesko 13/04

5

@alesko : não é possível fazer apenas git pullapós o checkout my_branchpara atualizar masterapenas o ramo.
Porque git pulltambém irá mesclar para a ramificação atual -> no seu cenário para omy_branch

@ Simon : isso fará também o empurrão. por que é que?

$ git branch -u origin/master
Branch master set up to track remote branch master from origin.

e de acordo com os documentos:

-u <upstream>
  Set up <branchname>'s tracking information so <upstream> is considered  
  <branchname>'s upstream branch. If no <branchname> is specified,  
  then it defaults to the current branch.

4

Primeiro, verifique se você está no ramo certo.
Então (apenas uma vez):

git branch --track

Depois disso, isso funciona novamente:

git pull

4

Você pode ter várias ramificações. E sua ramificação atual não configurou seu upstream no controle remoto.

Passos para corrigir isso:

git checkout branch_name
git branch --set-upstream-to=origin/remote_branch_name local_branch_name

por exemplo

// this set upstream of local branch develop to remote branch  origin/develop,
git branch --set-upstream-to=origin/develop develop

Depois de fazer isso, quando você faz git pull, ele puxa da ramificação especificada.


3

Você pode especificar qual ramificação deseja extrair:

git pull origin master

Ou você pode configurá-lo para que seu ramo mestre local rastreie o ramo mestre do github como um upstream:

git branch --set-upstream-to=origin/master master
git pull

Esse rastreamento de ramificação é configurado automaticamente quando você clona um repositório (apenas para a ramificação padrão), mas se você adicionar um controle remoto a um repositório existente, precisará configurar o rastreamento por conta própria. Felizmente, o conselho dado pelo git torna muito fácil lembrar como fazê-lo.

--set-upstream está obsoleto no git 1.9.x, aparentemente. No futuro, você gostaria de usar algo como

git branch -u origin/master

supondo que você já fez check-out do mestre. Caso contrário, git branch -u origin/master masterfuncionará


2

Tente isto

git checkout master

git pull origin master

2
Isso realmente não está respondendo à pergunta. Além disso, embora não há nenhuma resposta aceitou o topo eleito um é muito mais adequado como uma resposta a esta pergunta velha
fejese

1

Você precisa configurar seu rastreamento (upstream) para a filial atual

git branch --set-upstream master origin/master

Já está obsoleto, e não pode ser usado - sinalizador --track

git branch --track master origin/master

Também gosto da referência de documento que o @casey observa:

-u <upstream>
  Set up <branchname>'s tracking information so <upstream> is considered  
  <branchname>'s upstream branch. If no <branchname> is specified,  
  then it defaults to the current branch.

1

O que funcionou para mim foi: git branch --set-upstream-to = origin master Quando fiz um pull novamente, só recebi as atualizações do master e o aviso foi embora.


1

Se, como eu, você precisar fazer isso o tempo todo, poderá configurar um alias para fazê-lo automaticamente, adicionando o seguinte ao seu .gitconfigarquivo:

[alias]
    set-upstream = !git branch --set-upstream-to=origin/`git symbolic-ref --short HEAD`

Quando você vir a mensagem There is no tracking information..., basta executar git set-upstreame git pushnovamente.

Obrigado a https://zarino.co.uk/post/git-set-upstream/


0

Para baixar apenas as atualizações:

git fetch origin master

No entanto, isso apenas atualiza uma referência chamada origin/master. A melhor maneira de atualizar seu local masterseria o checkout / mesclagem mencionado em outro comentário. Se você pode garantir que seu local masternão tenha divergido do tronco principal origin/master, você pode usar git update-refpara mapear sua corrente masterpara o novo ponto, mas essa provavelmente não é a melhor solução a ser usada regularmente ...


0

Este comando foi descontinuado: git branch --set-upstream master origin/master

Portanto, ao tentar configurar o rastreamento, este é o comando que funcionou para mim:

git branch --set-upstream-to=origin/master master
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.