Git push non riuscito, "Gli aggiornamenti non rapidi sono stati rifiutati"


99

Ho modificato i miei repository GIT tramite Git Online. Dopo aver provato a inviare le modifiche al codice locale, ho ricevuto un errore:

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

Come posso risolvere questo problema?


Risposte:


137

Estrarre prima le modifiche:

git pull origin branch_name

1
Se questo non risolve il tuo problema, assicurati di spingere verso lo stesso ramo di quello su cui stai attualmente lavorando. Controlla su quale ramo ti trovi con "git status".
afilina

1
Questo comando mi ha funzionato, tuttavia mi piacerebbe sapere, perché questo non git pull:? Il telecomando è uguale origin, in modo che sia effettivamente: git pull origin. Non dovrebbe aggiornare tutti i rami?
Karlen Kishmiryan

83

Aggiungi --force alla riga di comando se sei sicuro di voler eseguire il push. Ad esempio, usa git push origin --force(consiglio la riga di comando in quanto troverai molto più supporto da altri utenti con la riga di comando. Anche questo potrebbe non essere possibile con SmartGit.) Vedi questo sito per maggiori informazioni: http://help.github.com/ telecomandi /


8
--force risolverà i tuoi problemi ma potenzialmente danneggerà gli altri. Dovrebbe essere usato solo con molta cura (e conoscenza)
schoetbi

7
-1 perché forzare spinge in generale è un'idea terribile.
joshin4colours

6
+1 perché 5 persone hanno concordato con @ joshin4colours di dare -1. Ma mentre la spinta forzata non è sempre l'idea migliore (cosa che git chiarisce negando la tua spinta), se fosse una cattiva idea il 100% delle volte, l'opzione non esisterebbe. Il suggerimento di Matt qui può certamente essere utile ad altri.
user1271772

2
Sentiti libero di usare il --forcese sei l'unico che usa quel ramo. Tuttavia, causa problemi quando si condivide un ramo con altri sviluppatori.
Robert Brisita

22

Prima di spingere, esegui un git pull con l'opzione rebase. Questo otterrà le modifiche che hai fatto online (nella tua origine) e le applicherà localmente, quindi aggiungerà le tue modifiche locali sopra di essa.

git pull --rebase

Ora puoi eseguire il push in remoto

git push 

Per maggiori informazioni dai un'occhiata alla spiegazione di Git rebase e al Capitolo 3.6 Git Branching - Rebasing .


2
Nel mio caso git pull --rebasefinisce conThere is no tracking information for the current branch. Please specify which branch you want to rebase against.
trejder

17

Ho riscontrato lo stesso errore, basta aggiungere "--force" al comando, funziona

git push origin master --force

6
ci sono conseguenze per questo?
jayunit100

8
perdere impegni di altri.
Giovanni Toraldo

1
Ho avuto una situazione strana in cui questo è esattamente quello che volevo fare ... spazzare via il contenuto di un ramo master remoto appena creato con qualcosa di nuovo. Questo ha risolto il mio problema. Anche se non è la soluzione per tutti, --forcepuò essere utile.
Brad

1
Non credo che questa risposta meriti di essere votata 6 volte. Questa è una valida soluzione al problema fornito, tuttavia, l'autore avrebbe potuto essere un po 'più descrittivo riguardo alle circostanze intorno alle quali questo comando sarebbe stato utile. Se vale la pena menzionarlo visto che valeva la pena scrivere (la funzionalità per --force)
Aiden Strydom

5

Ho avuto lo stesso problema.
Il motivo era che la mia filiale locale aveva in qualche modo perso il monitoraggio a favore della controparte remota.

Dopo

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

e risolvendo i conflitti di fusione, sono stato in grado di spingere.


Sembra che tu abbia perso i cambiamenti nel ramo remoto
ozma

5

Puoi aggiungere --force-with-lease al comando, funzionerà.

git push --force-with-lease

--force è distruttivo perché sovrascrive incondizionatamente il repository remoto con qualsiasi cosa tu abbia localmente. Ma --force-with-lease assicurati di non sovrascrivere il lavoro di altri.

Vedi maggiori informazioni qui .


1

(Una) soluzione per Netbeans 7.1: prova un pull. Probabilmente anche questo fallirà. Ora dai un'occhiata ai log (di solito sono mostrati ora nell'IDE). C'è una / più riga che dice:

"Pull non riuscito a causa di questo file:"

Cerca quel file, cancellalo (fai un backup prima). Di solito è un file .gitignore, quindi non cancellerai il codice. Ripeti la spinta. Tutto dovrebbe funzionare bene ora.


1

L'utilizzo --rebasedell'opzione ha funzionato per me.

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

Quindi spingere al repo.

  • git push <remote> <branch>

Per esempio

git pull origin master --rebase

git push origin master


0

Ho avuto lo stesso problema. Ho risolto con

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

3
OP dice di spingere le modifiche al codice locale. checkoutsovrascriverà queste modifiche o almeno non le includerà nel push.
trejder

0

Questo è ciò che ha funzionato per me. Può essere trovato nella documentazione di git qui

Se sei nel ramo desiderato puoi farlo:

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

Hai riscontrato lo stesso problema, per risolverlo, esegui i seguenti gitcomandi.

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

Devi prima aver creato il repository su GitHub.


0

A volte, mentre prendi un tiro dal tuo coraggio, la HEAD si stacca. Puoi verificarlo inserendo il comando:

git branch 
  • (TESTA staccata da 8790704)

    maestro

    sviluppare

È meglio passare al tuo ramo e prendere un nuovo tiro dal tuo rispettivo ramo.

git checkout develop

git pull origin develop

git push origin develop
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.