Sua configuração especifica para mesclar com o <nome da filial> do controle remoto, mas nenhuma referência foi buscada.


202

Estou recebendo este erro para puxar:

Sua configuração especifica para mesclar com o ref 'refs / heads / feature / Sprint4 / ABC-123-Branch' do controle remoto, mas nenhum ref foi buscado.

Este erro não está vindo para nenhum outro ramo.
O que há de especial nesse ramo é que ele é criado a partir do commit anterior de outro ramo.

Meu arquivo de configuração se parece com:

[core]
    repositoryformatversion = 0
    filemode = false
    bare = false
    logallrefupdates = true
    symlinks = false
    ignorecase = true
    hideDotFiles = dotGitOnly
[remote "origin"]
    url = <url here>
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
[branch "new-develop"]
    remote = origin
    merge = refs/heads/new-develop
[branch "feature/Sprint4/ABC-123-Branch"]
    remote = origin
    merge = refs/heads/feature/Sprint4/ABC-123-Branch

Você pode compartilhar o comando que está usando para fazer a mesclagem?
Dchayka

1
Esse problema pode ocorrer quando a ramificação remota foi excluída. Verifique se está realmente lá.
Benny Neugebauer

4
Leitores futuros: Se você sabe que a ramificação remota existe, verifique se está ignorando maiúsculas ou minúsculas. Eu havia configurado uma filial local para rastrear uma filial remota, mas digitei o nome do controle remoto em letras minúsculas. Só tinha que reconfigure local para rastrear origem / branchname em vez de origem / branchname
Jerreck

Acabei de ter esse erro e o problema era muito mais simples do que as respostas abaixo. Perdi minha conexão VPN. Portanto, esse também é o erro que você obtém se o git não puder acessar o servidor de origem remota.
Ben Thurley 18/03

Meu servidor git estava fora do ar. Essa é a causa.
dellasavia 28/06

Respostas:


147

O que isto significa

O seu upstream - o controle remoto que você chama origin- não tem mais, ou talvez nunca tenha (é impossível distinguir apenas dessa informação) um ramo chamado feature/Sprint4/ABC-123-Branch. Há um motivo particularmente comum para isso: alguém (provavelmente você não, ou você se lembraria) excluiu o ramo nesse outro repositório Git.

O que fazer

Isso depende do que você deseja . Veja a seção de discussão abaixo. Você pode:

  • criar ou recriar a ramificação no controle remoto ou
  • exclua sua filial local ou
  • qualquer outra coisa que você possa pensar.

Discussão

Você deve estar executando git pull(se estivesse executando, git mergevocê receberá uma mensagem de erro diferente ou nenhuma mensagem de erro).

Quando você executa git fetch, seu Git entra em contato com outro Git, com base na urllinha na [remote "origin"]seção de sua configuração. O Git executa um comando ( upload-pack) que, entre outras coisas, envia ao Git uma lista de todos os ramos. Você pode usar git ls-remotepara ver como isso funciona (tente, é educacional). Aqui está um trecho do que recebo ao executar isso em um repositório Git git:

$ git ls-remote origin
From [url]
bbc61680168542cf6fd3ae637bde395c73b76f0f    HEAD
60115f54bda3a127ed3cc8ffc6ab6c771cbceb1b    refs/heads/maint
bbc61680168542cf6fd3ae637bde395c73b76f0f    refs/heads/master
5ace31314f460db9aef2f1e2e1bd58016b1541f1    refs/heads/next
9e085c5399f8c1883cc8cdf175b107a4959d8fa6    refs/heads/pu
dd9985bd6dca5602cb461c4b4987466fa2f31638    refs/heads/todo
[snip]

As refs/heads/entradas listam todas as ramificações existentes no controle remoto, 1 junto com os IDs de confirmação correspondentes (para refs/tags/entradas que os IDs podem apontar para marcar objetos em vez de confirmar).

Seu Git pega cada um desses nomes de ramificação e o altera de acordo com a fetch(s) linha (s) na mesma remoteseção. Nesse caso, seu Git substitui refs/heads/masterporrefs/remotes/origin/master , por exemplo. Seu Git faz isso com todos os nomes de agências que aparecem.

Ele também registra os nomes originais no arquivo especial FETCH_HEAD(você pode ver esse arquivo se procurar no seu próprio .gitdiretório). Este arquivo salva os nomes e IDs buscados.

O git pullcomando é um atalho de conveniência: é executado git fetchno controle remoto apropriado e, em seguida git merge(ou, se assim for instruído git rebase) , com os argumentos necessários para mesclar (ou refazer) conforme orientado pela [branch ...]seção. Nesse caso, sua [branch "feature/Sprint4/ABC-123-Branch"]seção diz para buscar e origin, em seguida, mesclar com qualquer ID encontrado sob o nome refs/heads/feature/Sprint4/ABC-123-Branch.

Como nada foi encontrado sob esse nome, git pullreclama e para.

Se você executou isso como duas etapas separadas git fetche , em seguida git merge(ou git rebase), o seu Git examinaria suas remotes/origin/ramificações de rastreamento remoto em cache para ver com o que mesclar ou rebater. Se não foi tão ramo um em um tempo, você ainda pode ter o ramo de rastreamento remoto. Nesse caso, você não receberá uma mensagem de erro. Se nunca houve uma ramificação ou se você executou git fetchcom --prune(que remove ramificações de rastreamento remoto inativas), para que você não tenha uma ramificação de rastreamento remoto correspondente, você receberia uma reclamação, mas ela se referiria a ela origin/feature/Sprint4/ABC-123-Branch.

Em qualquer um dos casos , podemos concluir que feature/Sprint4/ABC-123-Branchnão existe agora no controle remoto chamado origin.

Provavelmente existia ao mesmo tempo, e você provavelmente criou sua filial local a partir da filial de rastreamento remoto. Nesse caso, você provavelmente ainda possui a ramificação de rastreamento remoto. Você pode investigar para ver quem removeu a ramificação do controle remoto e por quê, ou pode simplesmente pressionar algo para recriá-la ou excluir sua ramificação de rastreamento remoto e / ou sua ramificação local.


1 Bem, tudo o que isso vai admitir , pelo menos. Mas, a menos que eles ocultem especificamente algumas referências, a lista inclui tudo.


Obrigado por explicar o que o comando git pull realmente faz. Consegui corrigir meu problema executando o git fetch e depois mesclado.
fizch

11
Para remover referências inexistentes filiais que em seu repositório local, usogit remote prune origin
Yoav

1
@ Ben-Uri: sim, ou, run git fetch --prune origin, ou conjunto fetch.prunepara truea sua configuração (todos os três têm a intenção de fazer a mesma coisa, embora em algumas versões do Git alguns destes não foram bastante confiável).
Torek

1
Você precisaria git checkout <your remote branch>e tudo seria bom (em alguns casos).
Alexander Shtang 29/07/19

2
@ JonathanBenn: você pode usar git branch --set-upstream-to=origin/master masterpara mudar a configuração upstream do seu local master. Excluir e recriar tem isso como um efeito colateral (supondo que você use o estilo DWIM git checkout masterpara criá-lo), com um efeito colateral adicional de forçar o seu masterpara corresponder ao seu origin/master.
torek 9/03

71

Isso também pode acontecer se você / alguém renomeou o ramo. Portanto, siga estas etapas (se você souber que o nome da filial é renomeado) Assumindo o nome da filial anterior comowrong-branch-name e alguém o renomeou para correct-branch-nameSo.

git checkout correct-branch-name

git pull (você verá "Sua configuração especifica ..")

git branch --unset-upstream

git push --set-upstream origin correct-branch-name

git pull (você não receberá a mensagem anterior)


1
Nem é necessário git pushe não funcionará se o ramo atual estiver atrás do controle remoto. git pull origin correct-branch-namebasta.
Pierre

1
O comando para configurar o upstream está errado acima. Execute um git pull após, - operação sunsetunset, na saída do pull, você poderá ver um erro, com o comando para configurar o upstream, como abaixo, git branch --set-upstream-to = origin / <branch > mybranch
Ankit Marothi

Funcionou muito bem para mim depois de remover alguns arquivos grandes de meu repo e necessária para empurrar de volta para um novo repo i acabou de criar
larrytech

40

Verifique se sua filial remota está disponível para receber. Eu tive o mesmo problema, finalmente percebi que o ramo remoto foi excluído por alguém.


4
Foi o mesmo para mim!
Aerin

3
Após uma solicitação de recebimento, a fusão (ou seja, a pessoa que fez a mesclagem) tem a opção de excluir a ramificação que foi mesclada na ramificação de destino. Se você tentar puxar nesse ponto, receberá esse erro.
Artokun 01/10/19

isso é verdade :)
Malhaar Punjabi

7

Para mim, foi um problema de distinção entre maiúsculas e minúsculas. Minha filial local era Version_feature2 em vez de Version_Feature2. Voltei a verificar meu ramo usando a caixa correta e, em seguida, o git pull funcionou.


2
Este acabou por ser o meu problema também. Não é necessário óbvio com nomes de ramo bastante longos / complicados.
Håkon K. Olafsen

6

Este erro também pode ser recebido quando o nome da ramificação de origem tem algum problema de caso.

Por exemplo: a ramificação de origem é team1-Teame a ramificação local foi registrada como team1-team. Então, isso Tdentro -Teame tdentro -teampode causar esse erro. Isso aconteceu no meu caso. Portanto, alterando o nome local pelo nome da ramificação de origem, o erro foi resolvido.


6

No meu caso, eu estava simplesmente com falta de confirmação inicial na ramificação remota, portanto, a ramificação local não estava encontrando nada para extrair e estava enviando essa mensagem de erro.

Eu fiz:

git commit -m 'first commit' // on remote branch
git pull // on local branch

4

Eu recebi um erro semelhante quando a causa real era que meu disco estava cheio. Depois de excluir alguns arquivos, git pullcomecei a funcionar como eu esperava.


4

Eu continuei correndo para esse problema. No meu caso, o comentário de @ Jerreck sobre diferenças de caso nos nomes dos ramos foi a causa desse erro. Algumas ferramentas do Windows não estão cientes da distinção entre maiúsculas e minúsculas.

Para desativar a distinção entre maiúsculas e minúsculas no git, execute este comando:

git config --global core.ignorecase true

Observe que isso afetará mais do que os nomes das filiais. Por exemplo, se você tiver "Foo.h" e "foo.h" no mesmo diretório (não é uma boa idéia ao criar software para Windows), suspeito que você não possa desativar a distinção entre maiúsculas e minúsculas.


2

Basta verificar se alguém excluiu a filial no controle remoto.


1

No meu caso, eu excluí a ramificação original da qual derivou minha ramificação atual. Portanto, no arquivo .git / config eu tinha:

[branch "simil2.1.12"]
    remote = origin
    merge = refs/heads/simil2.0.5
    rebase = false

o simil2.0.5 foi excluído. Substituí-lo pelo mesmo nome do ramo:

[branch "simil2.1.12"]
    remote = origin
    merge = refs/heads/simil2.1.12
    rebase = false

e funcionou


1

Você pode vincular facilmente sua filial local à remota executando:

git checkout <your-local-branch>
git branch --set-upstream-to=origin/<correct-remote-branch> <your-local-branch>
git pull

0

Para mim, isso aconteceu porque eu mesclei um branch dev no master usando a interface da web e tentei sincronizar / puxar usando o VSCode que estava aberto no dev branch (é estranho que eu não possa mudar para master sem obter esse erro.)

git pull
Your configuration specifies to merge with the ref 'refs/heads/dev'
from the remote, but no such ref was fetched.'

Faz sentido que não o encontre refs / heads / dev - para mim foi mais fácil excluir a pasta local e clonar novamente.


0

Acabei de receber exatamente esse erro ao executar "git pull" quando meu disco estava cheio. Criou algum espaço e tudo começou a funcionar bem novamente.


0

Você pode editar o ~/.gitconfigarquivo na sua pasta pessoal. É aqui que todas as configurações globais são salvas.

Ou use git config --global --unset-all remote.origin.urle depois execute git fetchcom o URL do repositório.


0

Eu estava enfrentando o mesmo problema em que meu ramo atual era dev e eu estava consultando o ramo MR e fazendo o git pull a partir de então. Uma solução fácil que tomei foi a criação de uma nova pasta para o MR Branch e o git pull lá seguido pelo git clone.

Então, basicamente, mantive pastas diferentes para enviar o código para uma ramificação diferente.


0

Acabei de receber o mesmo erro quando não usei o caso correto. Eu poderia fazer o checkout da 'integração'. Git me disse para executar um git pullpara atualizar meu ramo. Fiz isso, mas recebi o erro mencionado. O nome correto da ramificação é 'Integração' com uma maiúscula 'I'. Quando eu verifiquei o ramo e o puxei, ele funcionou sem problemas.


-2

Se outra atração funcionar, significa que sua internet não estava conectada.


Uma série de votos negativos e, no entanto, essa foi a causa que tive de receber esse erro. Eu tinha Internet, mas havia perdido a VPN no meu servidor git. Depois de se reconectar à VPN, o pull funcionou bem.
Ben Thurley 18/03
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.