A mensagem 'src refspec master não corresponde a nenhum' ao enviar confirmações no Git

2691

Clono meu repositório com:

git clone ssh://xxxxx/xx.git 

Mas depois de eu mudar alguns arquivos e adde commit-los, quero empurrá-los para o servidor:

git add xxx.php
git commit -m "TEST"
git push origin master

Mas o erro que eu volto é:

error: src refspec master does not match any.  
error: failed to push some refs to 'ssh://xxxxx.com/project.git'
sinoohe
fonte
26
@ Marco Isso não é uma cópia. Essa é uma questão muito específica sobre como enviar uma filial local para uma filial remota. Este é sobre como inicializar um repositório e empurrá-lo para cima. Eles produzem o mesmo erro, mas as RAZÕES que produzem esse erro e as correções são totalmente diferentes. Além disso, você deve aceitar uma resposta. Provavelmente o primeiro, visto que responde à pergunta e já ajudou mais de 350 pessoas.
Tandrewnichols
Você instalou os comandos git config para instalar e configurar o git globalmente em sua máquina?
IgorGanapolsky
1
Espero que este post seria útil somebody- samranga.blogspot.com/2015/07/... O erro na pergunta pode ser exibido mesmo quando tentou criar um git BitBucket repositório de um projeto já existente localmente
Samitha Chathuranga
Eu recebi esse erro tentando enviar o nome do ramo errado. Resolvido usando git statuspara obter o correto.
Tom Howard
5
Mais uma tarefa simples dificultada pelo Git. Os desenvolvedores do Git devem usar o Stack Overflow como feedback em seu loop SDLC. Mais de 850.000 pessoas devem indicar que algo está seriamente errado no fluxo de trabalho do Git. Eles precisam contratar um especialista em UX, porque claramente não conseguem fazer isso por conta própria.
jww 16/09/17

Respostas:

4140

Talvez você só precise se comprometer. Encontrei isso quando fiz:

mkdir repo && cd repo
git remote add origin /path/to/origin.git
git add .

Opa! Nunca cometido!

git push -u origin master
error: src refspec master does not match any.

Tudo que eu tinha que fazer era:

git commit -m "initial commit"
git push origin master

Sucesso!

baisong
fonte
130
Não basta seguir este passo cegamente, observe o que o @Vi mencionou e modifique seu comando push para corrigir ref.
Kumar
49
O motivo mais provável para esse erro é que todos os arquivos não são rastreados e não foram adicionados. git add --allcaso deseje adicionar todos os arquivos ou você pode adicionar seletivamente os arquivos. Então git commit -m "Initial comment", git push origin master. Isso certamente vai funcionar.
Bhanu Pratap Singh
6
Corrige um problema diferente, o que é legal, mas não é realmente uma resposta para esta pergunta real.
Michael Durrant
7
git commit -m 'initial commit'deve ser citado duas vezes. ' git commit -m "initial commit", pelo menos nas janelas.
dance2die
5
Outra possível razão: você realmente não tem uma filial chamada mestre
CarlosAS
843
  1. Tente git show-refver o que você tem refs. Existe um refs/heads/master?

  2. Você pode tentar git push origin HEAD:mastercomo uma solução mais independente de referência local. Isso indica explicitamente que você deseja enviar a ref local HEADpara a ref remota master(consulte a documentação do git-push refspec ).

Vi.
fonte
6
meu ramo principal não estava no topo dos commits! assim que eu criei um ramo que era no final de todas as filiais e eu empurrou-os para o servidor:
sinoohe
10
git checkout -b testbranch; git push origin testbranch: master
sinoohe 17/11/2010
101
git show-refmostrou meu ramo; o git push origin HEAD:<branch>funcionou para mim.
Glen Solsberry
5
Você acabou de me salvar Vi. Obrigado por git push origin HEAD:master. Mas por que algo assim git push --force origin masternão funciona?
shkschneider
4
@ gms8994 - você está correto. se alguém criar um ramo como primeira coisa em vez de entrar no mestre, o mesmo unfriendlyerro será exibido. usar git push origin <branch>, em vez de masterno caso de você tentar git checkout -b <branch>antes de qualquer primeiro empurrão após inicialgit remote add origin <url>
asyncwait
225

Eu também tive um erro semelhante depois de excluir todos os arquivos no meu computador local e preciso limpar todos os arquivos no repositório.

Minha mensagem de erro foi algo como isto:

error: src refspec master does not match any.
error: failed to push some refs to 'git@github ... .git'

E foi resolvido executando os seguintes comandos:

touch README
git add README

git add (all other files)
git commit -m 'reinitialized files'
git push origin master --force  # <- caution, --force can delete others work.
Aryo
fonte
10
As outras respostas não resolveram o problema que eu estava tendo (por exemplo, eu já havia cometido e ainda tinha esse erro), mas estava fazendo um git push origin BRANCH --forcetrabalho. Obrigado!
precisa
Veja esta resposta anterior . Eu suspeito que você precisava adicionar um arquivo porque o git não rastreia diretórios vazios.
3
push --force também pode acabar completamente com o trabalho duro dos colegas de trabalho. Adicionado aviso por ele.
Michael Durrant
3
Isso resolveu meu problema. Eu acho que o git add fez isso. Embora empurrar as coisas à primeira vista, o git não reconheça as coisas, pode ser por isso que eu tive o problema. O comando git add resolveu meu problema. depois disso eu fui capaz de empurrar sem --force. Graças Aryo
Anandaraja_Srinivasan
203
  1. Minhas alterações já foram confirmadas
  2. O envio forçado ainda me deu o mesmo erro.

Então, eu tentei a solução do Vi :

git push origin HEAD:<remoteBranch> 

Isso funcionou para mim.

tldr
fonte
19
Finalmente descobri que era porque eu escrevi errado o nome do ramo. Eu empurrei com sucesso ramo à origem com um ramo chamado B com git push origin HEAD:B, mas eu ainda tenho o mesmo erro cada vez que quando eu empurrar com git push originno ramo A.
Yi H.
1
@YiHuang, ugh obrigado, eu verifiquei o nome da minha filial antes e depois verifiquei novamente por causa do seu comentário - tinha o mesmo problema, com erros de ortografia.
lakesare
1
@ YiH.i tinha certeza de que o nome do meu ramo está correto, mas eu apenas o verifiquei novamente depois de ler seu comentário e meu comentário ruim - tem o mesmo problema.
Ponteiro nulo
125
git push -u origin master
error: src refspec master does not match any.

Para isso, é necessário inserir a mensagem de confirmação da seguinte forma e pressionar o código:

git commit -m "initial commit"

git push origin master

Enviado com sucesso para dominar.

VIKAS KOHLI
fonte
Eu verifiquei que está funcionando. Por favor, ignore opção -u e tente
Vikas Kohli
O problema aqui parece ser completamente diferente do do OP ... mas parece que muitos, inclusive eu, tiveram esse problema.
ZX9 11/12/19
110

Para mim, eu tive que garantir que a chave pública esteja configurada corretamente no servidor (anexada em ~ / .ssh / allowed_keys) e no GitHub / Bitbucket (adicionado às minhas chaves SSH no GitHub ou Bitbucket) - elas precisam corresponder.

Então:

git add --all :/

git commit -am 'message'

git push -u origin master

Funcionou para mim no final.

Vermelho
fonte
88

Descobri que isso aconteceu em um repositório totalmente novo depois que o Git adicionou apenas um diretório.

Assim que adicionei um arquivo (por exemplo, um README), o Git push funcionou muito bem.

Andrew E
fonte
6
Provavelmente isso funciona porque o git não controla diretórios, apenas arquivos. Portanto, se um diretório estiver vazio, o git não o adicionará.
1
O OP adicionou um arquivo (xx.php), portanto, esse não foi o problema nesse caso, embora em outros casos isso possa ser um problema e a adição de um arquivo seja uma solução para esse problema.
Michael Durrant
1
Uma solução tão simples para um problema frustrante. Eu estava testando a criação e clonagem de repositórios e criei diretórios vazios e não arquivos.
James Wierzba
1
8 anos depois, isso me salvou de dor de cabeça!
rvictordelta
No meu caso, 1 -> git init 2 ---> git add origin .... etc 3 ---> git git push -u origin master ===> Então recebi o erro acima. ===> Então eu executei seguindo 2 comandos, é desaparecer. ---> git add * ---> git commit -m "Alguma mensagem" ---> git git push -u origin master ===> Funcionou bem para mim, no meu caso.
Rao
67

Faltando ou ignorando git add .ou git commitpode causar este erro:

git push -u origin master
Username for 'https://github.com': yourusername
Password for 'https://[email protected]': 
error: src refspec master does not match any.
error: failed to push some refs to 'https://github.com/yourusername/foobar.git'

Para corrigi-lo, reinicialize e siga a sequência apropriada:

git init
git add .
git commit -m 'message'
git *create remote
git push -u origin master
aug2uag
fonte
Isso é correto, o fim do negócio é mais especificamente git remote add __REMOTE_NAME__ __URL_OR_SSH__, e acima do nome remoto é "origem"
aug2uag
1
Eles acrescentaram e se comprometeram em sua pergunta, para que esse não fosse o problema, mesmo que isso ajude outras pessoas.
Michael Durrant
Essa resposta funcionou, no entanto, devido à -uopção usada aqui.
Michael Durrant
63

Para corrigi-lo, reinicialize e siga a sequência de código apropriada:

git init
git add .
git commit -m 'message'
git push -u origin master
pratik kumar
fonte
55

Certifique-se de adicionar primeiro e depois confirmar / enviar:

Gostar:

git init
git add .
git commit -m "message"
git remote add origin "github.com/your_repo.git"
git push -u origin master
Saurabh Singh
fonte
44

Enfrentei o mesmo problema e usei --allow-empty:

$ git commit -m "initial commit" --allow-empty
...
$ git push
...

Suplemento

Uma das principais razões desse problema é que alguns servidores Git, como o BitBucket, não têm sua masterramificação inicializada quando um repositório novo é clonado.

Jin Kwon
fonte
43

Isso acontece também quando você está em um ramo específico e tenta enviar outro ramo que ainda não existe, 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'
wilsonfoz
fonte
3
RI MUITO. Eu estava tentando empurrar para o mestre de origem, mas esse ramo não existia. Foi chamado origem estável.
Penner
1
O -upode ter ajudado aqui.
Michael Durrant
1
No caso acima, é claro que o problema é que não há ramificação local master; portanto, você não pode enviá-lo. Você quer quer empurrar um ramo existente - ou criar o branch master e depois empurrá-lo, como este:git checkout -b master; git push -u origin master;
tanius
4
Acabei de receber isso quando escrevi incorretamente o nome do ramo.
Sebastian Ärleryd
2
Minha filial local estava escrita "s h eduler" e eu estava fazendo git push origin scheduler. HA! Uma carta desligada o matará na programação. lol
protoEvangelion
35

Para mim, o seguinte trabalhou para mover arquivos não rastreados:

git add --all

Em seguida, segui etapas semelhantes

 git commit -m "First commit"

Então,

git remote add origin git@github.....

Por último mas não menos importante:

git push -u origin master

Ao fazer isso, a segurança do Windows será exibida, solicitando seu nome de usuário e senha.

Areeha
fonte
1
você quis dizer `git add --all` com dois traços?
Abdallah Abdillah
29

No meu caso, esqueci de incluir o .gitignorearquivo. Aqui estão todas as etapas necessárias:

  1. Crie um repositório Git vazio no controle remoto,
  2. No local, crie o arquivo .gitignore para o seu projeto. O GitHub fornece uma lista de exemplos aqui
  3. Inicie um terminal e, no seu projeto, execute os seguintes comandos:

    git remote add origin YOUR/ORIGIN.git
    
    git add .
    
    git commit -m "initial commit or whatever message for first commit"
    
    git push -u origin master
    
Ismail H
fonte
Como é este o erro em questão relacionado ao .gitignore ?! Se estiver relacionado (o que duvido muito), você deve explicá-lo em sua resposta. Obrigado
pedram bashiri
26

Basta adicionar uma confirmação inicial. Siga esses passos:

  • git add .

  • git commit -m "initial commit"

  • git push origin master

Isso funcionou para mim.

NeeruKSingh
fonte
24

Meu problema foi que o ramo 'mestre' ainda não havia sido criado localmente.

Um rápido

git checkout -b "master"

criou o ramo mestre, nesse ponto, uma rápida

git push -u origin master

levou o trabalho até o repositório Git.

Anthony
fonte
22

Você provavelmente esqueceu o comando "git add". após o comando "git init".

verão
fonte
Além disso, é git commitclaro ...
Bill
20

Também segui as instruções do GitHub da seguinte maneira, mas ainda enfrentei o mesmo erro mencionado no OP:

git init
git add .
git commit -m "message"
git remote add origin "github.com/your_repo.git"
git push -u origin master

Para mim, e espero que isso ajude alguns, eu estava enviando um arquivo grande (1.58 GB on disk)no meu MacOS. Enquanto copiava a linha de códigos sugerida acima, eu não estava esperando meu processador concluir o add .processo. Então, quando eu digitei, git commit -m "message"ele basicamente não fez referência a nenhum arquivo e não foi concluído o que for necessário para confirmar com êxito meu código no GitHub.

A prova disso é que, quando eu digito, git statusgeralmente recebo fontes verdes para os arquivos adicionados. Mas tudo estava vermelho. Como se não tivesse sido adicionado.

Então refiz as etapas. Digitei git add .e esperei que os arquivos terminassem de ser adicionados. Então eu segui os próximos passos.

Gel
fonte
19

Isso significa que você esqueceu de fazer o commit inicial, tente

git add .
git commit -m 'initial commit'
git push origin master
xuri
fonte
por favor escreva git commit -m "commit inicial"
Yash Agrawal 17/16
19
  1. Primeiro, git add .
  2. Segundo, git commit -m "message"
  3. Terceiro, git push origin branch

Verifique se há erros de ortografia, pois isso também pode causar esse erro.

Alwan Mortada
fonte
18

Eu tive o mesmo problema quando perdi a corrida:

git add .

(Você deve ter pelo menos um arquivo ou obterá o erro novamente.)

neoDev
fonte
18

Isso acontece se você esquecer de se comprometer antes de pressionar pela primeira vez. Apenas corra:

git commit -m "first commit"
Badr Bellaj
fonte
17

Para verificar o status atual git status,.

E siga estas etapas também:

git init
git add .
git commit -m "message"
git remote add origin "github.com/your_repo.git"
git push -u origin master
Dinith
fonte
16

Isso acontece quando você adiciona seu arquivo, esquece de confirmar e pressionar. Portanto, confirme os arquivos e empurre.

user993563
fonte
14

Eu tive o mesmo problema. Eu fiz isso pelas seguintes etapas:

1. git commit -m 'message'
2. git config --global user.email "your mail"
3. git config --global user.name "name"
4. git commit -m 'message'
5. git push -u origin master
user3051460
fonte
14

Se você receber esse erro ao trabalhar no modo HEAD desanexado, poderá fazer o seguinte:

git push origin HEAD:remote-branch-name

Veja também: Fazendo um Git empurrar de uma cabeça desanexada

Se você estiver em uma filial local diferente da filial remota, poderá fazer o seguinte:

git push origin local-branch-name:remote-branch-name
estalar
fonte
13

No cenário em que você faz check-out do código de um repositório externo (GitHub) e deseja importá-lo no sistema pessoal / interno, esse comando realmente brilha:

git push --all origin

Isso envia todas as ramificações locais para o controle remoto, sem verificar as referências e sem insistir nas confirmações.

d.raev
fonte
12

Isso também acontecerá se você digitar um erro de digitação no nome da filial que está tentando enviar.

Gavin
fonte
2
Suspeito que muitos de nós que viemos aqui por meio da pesquisa na Web digitaram o nome de maneira errada!
sage
12
git add .

é tudo o que você precisa. Esse código rastreia todos os arquivos não rastreados no seu diretório.

Caçador
fonte
10

Caso você esteja enfrentando esse problema, mesmo depois de fazer git inite enviar seu commit inicial. Você pode tentar o seguinte,

git checkout -b "new branch name"
git push origin "new branch name"

Seu código será enviado como uma nova ramificação.

Govind
fonte