mestre rejeitado -> mestre (avanço não rápido)


216

Estou tentando enviar meu projeto (todos os arquivos em um novo repositório). Sigo as etapas, mas quando pressiono git push -u origin master, recebo este erro:

! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'git@github.com:asantoya/projectnewbies.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again.  See the
'Note about fast-forwards' section of 'git push --help' for details.

Eu recebi esse erro várias vezes e não consigo descobrir o que fazer.


4
Se você tem certeza que seu mestre local tem as mais recentes alterações desejadas no controle remoto, em seguida, fazer git empurrar --force
IgorGanapolsky

34
git push --force <remote_repository>trabalhou para mim.
Classificador

@ Sorter - Eu tenho tido o mesmo problema durante todo o dia, isso me ajudou! Obrigado. Mas ele não fornece uma explicação sobre por que o problema ocorreu em primeiro lugar e por que a correção funcionou.
Padawan

1
@pmr, apenas perguntando irreverentemente se o OP "ler a mensagem de erro" não ajuda em nada. Obviamente, a mensagem de erro não fazia sentido para o OP, assim como não fazia nenhuma mensagem para mim ou para as outras 66 pessoas que votaram no seu post. Snarky, mais espirituoso que nunca, não ajuda as pessoas.
Padawan

3
@Padawan Você também notará que essa "pessoa sarcástica e mais inteligente do que o outro" forneceu a resposta aceita para esta pergunta e 72 pessoas (provavelmente incluindo você) acharam útil. Lamento que meu comentário tenha parecido arrogante, mas teria sido minha primeira pergunta se você tivesse me feito essa pergunta também em um contexto profissional. Às vezes, parar e levar um minuto para ler atentamente a mensagem de erro às vezes faz maravilhas. Eu fiz por mim quando vi esse erro pela primeira vez.
Pmr

Respostas:


160

Como a mensagem de erro diz: git pullantes de tentar git push. Aparentemente, sua filial local está fora de sincronia com a filial de rastreamento.

Dependendo das regras do projeto e do seu fluxo de trabalho, você também pode querer usar git pull --rebase.


1
ele mostra que a mesclagem automática do README.md de mesclagem automática falhou; conserte conflitos e depois confirme o resultado.
precisa saber é o seguinte

1
@ Asantoya17 As alterações que foram feitas no mestre remoto entram em conflito com as suas alterações. Revise o arquivo e revise-os. Em seguida, confirme os resultados da resolução. Por favor, obtenha um tutorial ou livro ou, pelo menos, leia as mensagens.
Pmr

1
O que significa pull? Permite enviar um arquivo ou buscar e fazer download de um arquivo no site do repositório? (por exemplo, Bit Bucket)
David Dimalanta

4
@AndrewS git push --force origin master. Se você se deparar com esse tipo de problema mais de uma vez na vida, o fluxo de trabalho do seu projeto será interrompido. Os recursos devem ser desenvolvidos em ramificações e mesclados sem avanço rápido e, se um recurso "falhar", você deve reverter a consolidação de mesclagem (de preferência faça seu teste em um ramo de integração antes de mesclar um recurso a ser dominado). Nenhuma idéia sobre Eclipse embora.
pmr

1
O que fazer se esse erro reportar git pull origin trunk:master?
Andry 28/07

175

AVISO: este nunca é um uso recomendado do git. Isso substituirá as alterações no controle remoto. Faça isso apenas se souber 100% de que as alterações locais devem ser enviadas ao mestre remoto.

Tente o seguinte: git push -f origin master


47
Não, não tente isso. From git help push: "Isso pode fazer com que o repositório remoto perca confirmações; use-o com cuidado."
Jcsahnwaldt Restabelece Monica

7
definitivamente não fazer isso
Lluís

14
isso funcionou para mim. Eu achei que estava tudo bem porque meu único commit no github foi o criado com um novo repositório. Provavelmente, é uma boa ideia não usá-lo após o início de um projeto.
Matthew Moore

1
pode ser útil se você quiser atualizar um repo que foi criado para fins de entrega (por isso não novas alterações no lado remoto)
Hib

Eu apenas usei isso porque fiz um commit, sincronizado com o GitHub, depois desejei ter adicionado outro arquivo ao commit. Então, eu o desfiz localmente, executei o comando acima para removê-lo do GitHub, depois o cometi novamente localmente e depois sincronizei. Tudo bem agora! Veja bem, eu sabia que nenhum outro commit foi feito nesse ramo.
ZeMinimalist 27/10


15

Acabei de receber este erro.

Eu criei um repositório github depois de criar meu repositório git local, então eu precisava aceitar as alterações no local antes de enviar para o github. Nesse caso, a única alteração foi o arquivo leia-me criado como etapa opcional ao criar o repositório do github.

git pull https://github.com/*username*/*repository*.git master

O URL do repositório é obtido aqui na página do projeto no github:

insira a descrição da imagem aqui

Em seguida, reinicializei (isso pode não ser necessário)

git init
git add .
git commit -m "update"

Em seguida, pressione:

git push

3
Esta resposta reflete o cenário real do caso.
Ktaf

9

Eu criei um novo repositório no github e tive o mesmo problema, mas ele também teve problemas ao puxar, então isso funcionou para mim.

mas isso não é recomendado em repositórios que já possuem muitos códigos, pois isso pode atrapalhar tudo

git push origin master --force

Esta resposta já foi fornecida: stackoverflow.com/a/16374574/1771479 e não é recomendada.
agold

9

AVISO:

Ir para um ' git pull' não é sempre uma solução, portanto, tenha cuidado. Você pode enfrentar esse problema (o mencionado no Q) se você tiver intencionalmente alterado seu histórico de repositório. Nesse caso, o git está confundindo as alterações no seu histórico com as novas alterações no repositório remoto. Portanto, você deve optar por um git push --force, porque a chamada git pulldesfará todas as alterações que você fez no seu histórico, intencionalmente.


8

Se git pullisso não ajudar, é provável que você tenha pressionado suas alterações (A) e depois disso você tenha git commit --amendadicionado mais algumas alterações (B). Portanto, o git pensa que você pode perder o histórico - ele interpreta B como um commit diferente, apesar de conter todas as alterações de A.

             B
            /
        ---X---A

Se ninguém alterar o repo depois A, você poderá fazê-lo git push --force.

No entanto, se houver alterações depois Ade outra pessoa:

             B
            /
        ---X---A---C

então você deve refazer a alteração das pessoas de Apara B( C-> D).

             B---D
            /
        ---X---A---C

ou corrija o problema manualmente. Ainda não pensei em como fazer isso.


7

use este comando:

git pull --allow-unrelated-histories <nick name of repository> <branch name>

gostar:

git pull --allow-unrelated-histories origin master

esse erro ocorre quando os projetos não têm nenhum ancestral comum.


7
git push -f origin master

use força bruta ;-) Provavelmente você está tentando adicionar uma pasta local criada antes de criar o repositório no git.


2
Toda e qualquer resposta, incluindo esta, deve dar um aviso.
D. Ben Knoble 25/01

1
Eu tentei isso e me custou muitos commits no GitHub que tive que restaurar de outro clone local do repositório. Perigoso.
Paflow

6

Isso ocorre porque você fez algumas alterações em seu mestre, portanto o projeto pede que você puxe primeiro. Se você deseja pressioná-lo de qualquer maneira, pode usar força bruta digitando isto:

git push -f origin master

Lembre-se de primeiro confirmar suas alterações:

git add .
git commit -m "Your commit message"


4

Você precisa fazer

git branch

se a saída for algo como:

* (no branch)
master

então faça

git checkout master

Verifique se você não possui confirmações pendentes, pois o check-out perderá todas as alterações não confirmadas.


4

! [rejeitado] mestre -> mestre (avanço não rápido)

Não entre em pânico, isso é extremamente fácil de corrigir. Tudo o que você precisa fazer é emitir um pull e sua filial avança rapidamente:

$ git pull myrepo mestre

Em seguida, tente novamente e tudo ficará bem:

$ git push github master


4

Isso aconteceu comigo quando eu estava no ramo de desenvolvimento e meu ramo mestre não está na atualização mais recente.

Então, quando tentei empurrar o git push do branch de desenvolvimento, tive esse erro.

Corrigi-o alternando para master branch, git pull e depois volto a desenvolver branch e git push.

$ git fetch && git checkout master
$ git pull
$ git fetch && git checkout develop
$ git push

3

Eu tive esse problema em uma máquina de desenvolvimento. O devgalho estava empurrando bem, mas o mastergalho me deu (enquanto git pushestava no devgalho):

! [rejected]        master -> master (non-fast-forward)

Então eu tentei:

git checkout master
git pull

O que me deu:

You asked me to pull without telling me which branch you
want to merge with, and 'branch.master.merge' in
your configuration file does not tell me, either.

Descobri que o ramo principal estava ausente .git/confige adicionei:

[branch "master"]
    remote = origin
    merge = refs/heads/master

Depois git pushtambém funcionou bem no devramo.


2

Meu controle remoto não estava sincronizado com o local, portanto funcionou para mim

git pull --rebase

e certifique-se de que, ao fazê git pull-lo novamente, já deve estar atualizado e agora você está pronto para avançar para a origem

assumindo que você já git remote add origin remote repository URL

Faz

`git push origin master`  

A captura de tela diz tudo insira a descrição da imagem aqui

Como alternativa, você pode fazer isso

  1. git stash (armazena temporariamente o trabalho não solicitado)
  2. git pull (sincronize seu local e remoto)
  3. git stash pop (retorne alterações não confirmadas)
  4. empurrão

1

Eu tive o mesmo problema. Eu uso o Git Totoise. Basta clicar com o botão direito -> TotoiseGit -> Limpar. Agora você pode enviar para o Github. Funcionou bem comigo: D


1

Isso ocorre porque você fez alterações conflitantes no mestre. E seu servidor de repositório não é capaz de lhe dizer isso com essas palavras; portanto, esse erro ocorre porque não é uma questão dele lidar com esses conflitos para você, então ele pede que você faça isso sozinho. Como ?

1- git pull Isso mesclará seu código do seu repositório ao código do seu site mestre. Então os conflitos são mostrados.

2- tratar esses conflitos manualmente.

3-

git push origin master

E pronto, seu problema foi resolvido.


0

O único que consegui resolver esse problema foi excluir o repositório local e git e criar o mesmo novamente nas duas extremidades. Funciona bem por enquanto.


Eu sempre mantenho um backup do meu repositório Git no Dropbox. Dessa forma, não preciso excluir o repositório local, apenas copio e colo os diretórios relevantes do Dropbox quando a situação surgir.
IgorGanapolsky

0

Se alguém tiver esse erro ao tentar enviar para o heroku, basta substituir 'origin' por 'heroku' assim: git push -f heroku master



0

Isso também pode ser causado devido a algum erro de nome causado ao dar um nome ao Repo. Se alguma das respostas acima não tiver funcionado, isso funcionou para mim:

Exclua esse repositório e crie um novo e tente os seguintes comandos novamente:

cd 'Local Directory Path'
git remote add origin *your_git_name.git*
git push -u origin master

se adicionar origem já existir, use isto:

git remote set-url origin *your_git_name.git*
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.