A mensagem de erro: error: src refspec main does not match any acontece por algumas causas rotineiramente comuns, principalmente ao iniciar um novo repositório de projeto.

Uma segunda linha de mensagem com o texto: error: failed to push some refs to github.com:nunomazer/meu-repositorio.git também pode aparecer na stack de erros.

Este erro é relacionado ao versionamento com Git, e pode acontecer se o seu projeto está em repositório gerenciado no Github, Gitlab ou Bitbucket.

O que significa o erro: src refspec main does not match any

A causa mais comum para o error: src refspec main does not match any é a falta de arquivos no track do projeto, isto é, falta de git commit. Inclusive pode verificar no Github, clicando em commits se existe algum realizado. Ou listando localmente com o comando git log --oneline.

Corrigindo o erro: src refspec main não corresponde a nenhum

Precisamos entender a causa para corrigir o erro relacionado ao src refspec não compatível com a ramificação principal ou principal. A seguir, mostro como corrigi-lo dependendo da causa.

Faltando commit antes do push

Sim, simples assim, ao iniciar um projeto, e adicionar os arquivos, se não é realizado o commit dos mesmos antes de tentar enviar (git push) os mesmos ao repositório central, o git informa que falta refspec para o branch (main ou master).

Para resolver então basta seguir a sequência usual:

git init
git remote add origin [email protected]:nunomazer/meu-repositorio.git
git branch -M main
git add .
git commit -m 'feat: My first feature'
git push -u origin main

Na sequência de exemplo, considerando um repositório novo, os passos foram:

  1. Iniciar o repositório localmente
  2. Adicionar o caminho do repositório remoto
  3. Alterar o nome da branch para main (necessário apenas se está usando uma versão do Git que cria a branch principal como master)
  4. Adicionar os arquivos alterados
  5. Fazer o commit dos arquivos
  6. Finalmente o push (enviar) para o repositório, agora sem erros

Os passos principais para evitar o erro portanto são o 4 e 5.

Tentativa de push de uma branch para outra

A mensagem de erro: “error: src refspec main does not match any” também acontece caso você esteja em uma branch especifica localmente e tenta realizar o push em outra branch remota, que ainda não existe.

Algo como:

git branch
* version-x  # you are in this branch
  version-y

git push -u origin master
error: src refspec master does not match any.
error: failed to push some refs to 'origin_address'

No exemplo acima ao chamar git branch as branches version-x e version-y foram listadas, isto é, são as branches que existem localmente.

Ao tentar fazer um push em master o erro acontece pois a branch master não existe localmente.

Portanto, ou você faz o git push de uma branch exstente, ou cria a master (neste caso) e então a envia:

git checkout -b master
git push -u origin master

O que fizemos aqui foi criar uma nova branch chamada master com o comando git checkout -b, e na sequência a enviamos para o repositório central no Github (por exemplo) com o comando git push.

Conclusões

Este erro é causado por alguns contextos em seu repositório local: ou você ainda não fez commit de nada ou está tentando enviar um branch que não existe localmente.

Se você conhece outras causas para o erro error: src refspec main does not match any com GIT no Github ou Gitlab, compartilha nos comentários.