Github "As atualizações foram rejeitadas porque o controle remoto contém trabalho que você não possui"

176

Criei um novo repositório, clonei-o, adicionei arquivos ao diretório, adicionei-os com add -Aalterações confirmadas e, quando tento enviar usando git push <repo name> master, obtenho "As atualizações foram rejeitadas porque o controle remoto contém trabalho que você não possui".

Isso não parece fazer sentido, pois é um novo repositório e contém apenas um arquivo leia-me.

nodwj
fonte

Respostas:

307

Isso acontece se você inicializou um novo repositório no github com READMEe / ou LICENSEarquivo

git remote add origin [//your github url]

//pull those changes

git pull origin master 

// or optionally, 'git pull origin master --allow-unrelated-histories' if you have initialized repo in github and also committed locally

//now, push your work to your new repo

git push origin master

Agora você poderá enviar seu repositório para o github. Basicamente, você precisa mesclar esses novos arquivos inicializados com o seu trabalho. git pullbusca e mescla para você. Você também pode buscar e mesclar se isso lhe convier.

palerdot
fonte
7
Criei um vídeo do YouTube com uma explicação mais detalhada e duas maneiras sugeridas para evitar esse problema em primeiro lugar.
Kevin Markham
16
Para o comando merge eu preciso usargit pull origin master --allow-unrelated-histories
Luciano Marqueto
Eu recebo "fatal: recusa de mesclar histórias não relacionadas"
Sergi
4
@Sergi trygit pull origin master --allow-unrelated-histories
palerdot
101

O erro possivelmente ocorre devido à estrutura diferente do código que você está comprometendo e presente no GitHub. Cria conflitos que podem ser resolvidos por

git pull

Mesclar conflitos resolvendo:

git push

Se você confirmar que seu novo código está correto, poderá usar:

git push -f origin master

Onde -fsignifica "force commit".

Kartikey Kumar Srivastava
fonte
13
'git push -f mestre origem' -este ajuda
Saurabh
4
O git push -f substitui o histórico remoto pelo histórico local, tenha cuidado ao usá-lo. Especialmente em repositórios públicos.
22417 Andre Andre
updates-were-rejectedIsso também acontece se você fez alterações no repositório do github no controle remoto, por exemplo: fez algumas alterações no arquivo leia-me usando o github gui. E, em seguida, tentou enviar seu novo trabalho para o github, ele mostrará esta mensagem dizendo que as alterações feitas no controle remoto, mas não estão presentes localmente.
Deke
13

Se este é seu primeiro empurrão

apenas mude o

git push <repo name> master

mude assim!

git push -f <repo name> master
Mahyar
fonte
1
Isso descarta arquivos como os criados inicialmente na origem. Em vez disso, use a git pullbefore para obter arquivos remotos e mesclar sua confirmação. Assim como os Estados resposta aceita
JayJay
@jayjaybricksoft Obrigado pelo seu comentário. É o primeiro envio, portanto, substituir os arquivos de origem é OK.
Mahyar 17/07/2018
2

As respostas fornecidas não funcionaram para mim.

Eu tinha um repositório vazio no GitHub com apenas o arquivo LICENSE e um único commit localmente. O que funcionou foi:

$ git fetch
$ git merge --allow-unrelated-histories
Merge made by the 'recursive' strategy.
 LICENSE | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)
 create mode 100644 LICENSE

Também antes que mergevocê queira:

$ git branch --set-upstream-to origin/master
Branch 'master' set up to track remote branch 'master' from 'origin'.
Koral
fonte
0

Eu segui estes passos:

Puxe o mestre:

git pull origin master

Isso sincronizará seu repositório local com o repositório Github. Adicione seu novo arquivo e depois:

git add .

Confirme as alterações:

git commit -m "adding new file  Xyz"

Por fim, pressione o mestre de origem:

git push origin master

Atualize seu repositório do Github, você verá os arquivos adicionados recentemente.

Darshan Jain
fonte
0

Se você estiver usando o Visual S2019, crie uma nova ramificação local como mostrado a seguir e envie as alterações para o repositório Filial local do VS2019

ptsivakumar
fonte