Git push falhou, “Atualizações não rápidas foram rejeitadas”


99

Eu editei meus repositórios GIT via Git Online. Depois de tentar empurrar minhas alterações de código local, recebi um erro:

Git push failed, To prevent from losing history, non-fast forward updates were rejected.

Como posso consertar isso?


Respostas:


137

Puxe as alterações primeiro:

git pull origin branch_name

1
Se isso não resolver o seu problema, certifique-se de que você está enviando para o mesmo branch daquele em que está trabalhando no momento. Verifique em qual branch você está com o "status git".
afilina

1
Este comando funcionou comigo, mas gostaria de saber, por que não git pull:? O controle remoto é igual origin, para que ele realmente funciona: git pull origin. Não deveria atualizar todos os ramos?
Karlen Kishmiryan de

83

Adicione --force à sua linha de comando se tiver certeza de que deseja enviar. Por exemplo, use git push origin --force(eu recomendo a linha de comando, pois você encontrará muito mais suporte de outros usuários com a linha de comando. Também pode não ser possível com o SmartGit.) Consulte este site para obter mais informações: http://help.github.com/ Remotos/


8
--force resolverá seus problemas, mas potencialmente prejudicará outras pessoas. Deve ser usado apenas com muito cuidado (e conhecimento)
schoetbi

7
-1 porque forçar empurra em geral é uma ideia terrível.
joshin4colours

6
+1 porque 5 pessoas concordaram com @ joshin4colours em dar -1. Mas embora o push forçado nem sempre seja a melhor ideia (o que o git deixa bem claro ao negar o push), se fosse uma ideia ruim 100% do tempo, a opção não existiria. A sugestão de Matt aqui certamente pode ser útil para outras pessoas.
user1271772

2
Sinta-se à vontade para usar o --forcese você for o único usando esse branch. No entanto, isso causa problemas ao compartilhar um branch com outros desenvolvedores.
Robert Brisita

22

Antes de empurrar, faça um git pull com a opção rebase. Isso obterá as alterações que você fez online (em sua origem) e as aplicará localmente, em seguida, adicionará suas alterações locais sobre elas.

git pull --rebase

Agora, você pode empurrar para remoto

git push 

Para obter mais informações, dê uma olhada na explicação do rebase Git e no Capítulo 3.6 Ramificação do Git - Rebase .


2
No meu caso git pull --rebaseacaba comThere is no tracking information for the current branch. Please specify which branch you want to rebase against.
trejder

17

Encontrei o mesmo erro, basta adicionar "--force" ao comando, funciona

git push origin master --force

6
existem consequências para isso?
jayunit100

8
perder commits de outros.
Giovanni Toraldo

1
Eu tive uma situação estranha em que isso é exatamente o que eu queria fazer ... explodir o conteúdo de um branch master remoto recém-criado com algo novo. Isso resolveu meu problema. Embora não seja a solução para todos, --forcepode ser útil.
Brad

1
Não acho que essa resposta mereça ser rejeitada 6 vezes. Esta é uma solução válida para o problema fornecido, no entanto, o autor poderia ter sido um pouco mais descritivo sobre as circunstâncias em que este comando seria útil. Vale a pena mencionar, pois vale a pena escrever (a funcionalidade para --force)
Aiden Strydom

5

Eu tive o mesmo problema.
O motivo era que minha filial local havia de alguma forma perdido o rastreamento para a contraparte remota.

Depois de

git branch branch_name --set-upstream-to=origin/branch_name
git pull

e resolvendo os conflitos de fusão, consegui empurrar.


Parece que você perdeu as alterações no branch remoto
ozma

5

Você pode adicionar --force-with-lease ao comando, ele funcionará.

git push --force-with-lease

--force é destrutivo porque sobrescreve incondicionalmente o repositório remoto com tudo o que você tem localmente. Mas --force-with-lease garante que você não sobrescreva o trabalho de outros.

Veja mais informações aqui .


1

(Um) Solução para Netbeans 7.1: Experimente um pull. Isso provavelmente também falhará. Agora dê uma olhada nos logs (eles geralmente são mostrados agora no IDE). Há uma / mais linhas dizendo:

"A extração falhou devido a este arquivo:"

Pesquise esse arquivo, exclua-o (faça um backup antes). Normalmente é um arquivo .gitignore, portanto, você não excluirá o código. Refaça o push. Tudo deve funcionar bem agora.


1

Usar a --rebaseopção funcionou para mim.

  • git pull <remote> <branch> --rebase

Em seguida, envie para o repositório.

  • git push <remote> <branch>

Por exemplo

git pull origin master --rebase

git push origin master


0

Eu tive o mesmo problema. Eu resolvi com

git checkout <name branch>
git pull origin <name branch>
git push origin <name branch>

3
OP diz sobre empurrar mudanças de código local. checkoutsubstituirá essas alterações ou, pelo menos, não as incluirá no push.
trejder

0

Isto é o que funcionou para mim. Ele pode ser encontrado na documentação do git aqui

Se você estiver no ramo desejado, pode fazer o seguinte:

git fetch origin
# Fetches updates made to an online repository
git merge origin YOUR_BRANCH_NAME
# Merges updates made online with your local work

0

Encontrou o mesmo problema, para resolvê-lo, execute os seguintes gitcomandos.

  • git pull {url} --rebase
  • git push --set-upstream {url} master

Você deve ter criado o repositório no github primeiro.


0

Às vezes, enquanto puxa o git, o HEAD se solta. Você pode verificar isso inserindo o comando:

git branch 
  • (HEAD separado de 8790704)

    mestre

    desenvolve

É melhor ir para o seu branch e dar uma nova tragada no seu respectivo branch.

git checkout develop

git pull origin develop

git push origin develop
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.