O que significa “Git push atualizações não avançadas foram rejeitadas” significa?

153

Estou usando o Git para gerenciar meus dois computadores e meu desenvolvimento. Estou tentando confirmar as alterações no GitHub e estou recebendo o erro.

Falha ao enviar alguns árbitros para <repo>. Para impedir que você perca o histórico, as atualizações sem avanço rápido foram rejeitadas. Mesclar alterações remotas antes de pressionar novamente.

O que poderia estar causando isso e como posso corrigir isso?

EDITAR:

Puxar o repositório retorna o seguinte:

* branch master-> master (sem avanço rápido) Já atualizado

Empurrar ainda me dá o erro mencionado acima.

Moshe
fonte

Respostas:

136

O GitHub tem uma boa seção chamada " Lidando com erros de " avanço não rápido " "

Este erro pode ser um pouco esmagador no começo, não tenha medo.
Simplificando, o git não pode fazer a alteração no controle remoto sem perder os commits, por isso recusa o push .
Geralmente, isso é causado por outro usuário empurrando para o mesmo ramo. Você pode remediar isso buscando e mesclando a ramificação remota ou usando pull para executar as duas coisas ao mesmo tempo.

Em outros casos, esse erro é resultado de alterações destrutivas feitas localmente usando comandos como git commit --amendou git rebase.
Embora você possa substituir o controle remoto adicionando --forceao pushcomando, você deve fazê-lo apenas se tiver certeza absoluta de que é isso que deseja fazer.
O envio forçado pode causar problemas para outros usuários que buscaram a ramificação remota e é considerado uma má prática. Em caso de dúvida, não force .


O Git não pode fazer alterações no controle remoto como uma mesclagem de avanço rápido, o que uma Referência do Visual Git ilustra como:

texto alternativo

Esse não é exatamente o seu caso, mas ajuda a ver o que é o "avanço rápido" (onde o HEADramo de uma filial é simplesmente movido para um novo commit mais recente).


O " branch master->master (non-fast-forward) Already-up-to-date" é geralmente para filiais locais que não rastreiam sua contraparte remota.
Veja, por exemplo, esta pergunta do SO "o git pull diz que está atualizado, mas o git push rejeita o avanço não rápido ".
Ou os dois ramos estão conectados, mas em desacordo com a respectiva história:
Consulte " História interminável do GIT - o que estou fazendo de errado aqui? "

Isso significa que seu ramo de subversão e seu ramo mestre remoto do git não concordam com nada.
Alguma mudança foi enviada / confirmada para uma que não está na outra.
Acenda gitk --all, e deve lhe dar uma pista do que deu errado - procure por "garfos" na história.

VonC
fonte
53

Isso significa que houve outras confirmações enviadas ao repositório remoto que diferem das confirmações. Geralmente, você pode resolver isso com um

git pull

antes de empurrar

Por fim, "avanço rápido" significa que as confirmações podem ser aplicadas diretamente na parte superior da árvore de trabalho sem a necessidade de uma mesclagem.

minichate
fonte
2
Isto é o que funcionou para mim! Esqueci que mudei o readme.md no site do repositório!
Ryanwinchester #
14

Uma atualização de avanço rápido é onde as únicas alterações de um lado são após a confirmação mais recente do outro lado, portanto, não é necessário que haja mesclagem. Isso significa que você precisa mesclar suas alterações antes de poder enviar por push.

bdukes
fonte
8

você pode querer usar força com operação push neste caso

mestre de origem do git push --force

uspinar
fonte
1
Está errado. a fonte total de github será eliminado e empurrou só você é novo fonte antiga fonte são excluídos
logeshpalani98
6

Nunca faça git -fisso, pushpois isso pode resultar em conseqüências desastrosas posteriores.

Você só precisa fazer uma git pullfilial local.

Ex:

git pull origin 'your_local_branch'

e depois faça um git push

Abhishek Thomas
fonte
0

Você precisa mesclar e resolver o problema conflicts locallyantes de enviar as alterações para o repo / fork remoto.

1) puxar (buscar e mesclar)

$ git pull remote branch 

2) Empurre as alterações

$ git push remote branch 

Ainda assim, você tem uma opção rápida de pushforçar o uso da --forceopção, mas deve ser evitado, pois isso pode resultar em perda de alterações ou afetar negativamente outros contribuidores.

Muhammad Soliman
fonte