Che cosa significa "Gli aggiornamenti push non avanzati di Git sono stati rifiutati"?


153

Sto usando Git per gestire i miei due computer e il mio sviluppo. Sto cercando di eseguire il commit delle modifiche a GitHub e visualizzo l'errore.

Impossibile spingere alcuni riferimenti a <repo>. Per evitare di perdere la cronologia, gli aggiornamenti non rapidi sono stati respinti. Unire le modifiche remote prima di premere nuovamente.

Cosa potrebbe causare questo e come posso risolverlo?

MODIFICARE:

L'estrazione del repository restituisce quanto segue:

* branch master-> master (non avanzamento rapido) Già aggiornato

Spingere mi dà ancora l'errore di cui sopra.


Risposte:


136

GitHub ha una bella sezione chiamata " Gestire gli errori " non veloce " "

Questo errore può essere un po 'travolgente all'inizio, non temere.
In poche parole, git non può apportare la modifica sul telecomando senza perdere i commit, quindi rifiuta la spinta .
Di solito questo è causato da un altro utente che spinge nello stesso ramo. Puoi rimediare recuperando e unendo il ramo remoto o usando pull per eseguire entrambi contemporaneamente.

In altri casi questo errore è il risultato di modifiche distruttive apportate localmente usando comandi come git commit --amendo git rebase.
Sebbene sia possibile sovrascrivere il telecomando aggiungendo --forceal pushcomando, è necessario farlo solo se si è assolutamente certi che questo è ciò che si desidera fare.
Le spinte forzate possono causare problemi ad altri utenti che hanno recuperato il ramo remoto ed è considerata una cattiva pratica. In caso di dubbio, non forzare la spinta .


Git non può apportare modifiche sul telecomando come un'unione di avanzamento rapido, che un riferimento a Visual Git illustra come:

testo alternativo

Questo non è esattamente il tuo caso, ma aiuta a vedere che cos'è "avanzamento rapido" (in cui il HEADdi un ramo viene semplicemente spostato in un nuovo commit più recente).


Il " branch master->master (non-fast-forward) Already-up-to-date" è di solito per le filiali locali che non tengono traccia della loro controparte remota.
Vedi ad esempio questa domanda SO " git pull dice aggiornato ma git push rifiuta l'avanzamento non veloce ".
Oppure i due rami sono collegati, ma in disaccordo con la loro rispettiva storia:
vedi " Storia infinita GIT - cosa sto facendo di sbagliato qui? "

Questo significa che il tuo ramo di sovversione e il tuo ramo master git remoto non sono d'accordo su qualcosa.
Alcuni cambiamenti sono stati spinti / impegnati in uno che non è nell'altro.
Accendi gitk --alle dovrebbe darti un indizio su cosa sia andato storto: cerca "forchette" nella storia.


53

Significa che ci sono stati altri commit inviati al repository remoto che differiscono dai tuoi commit. Di solito puoi risolverlo con a

git pull

prima di spingere

In definitiva, "avanzamento rapido" significa che i commit possono essere applicati direttamente in cima all'albero di lavoro senza richiedere una fusione.


2
Questo è ciò che ha funzionato per me! Ho dimenticato di aver cambiato il file readme.md sul sito del repository!
Ryanwinchester,

14

Un aggiornamento rapido è il punto in cui le uniche modifiche apportate da una parte sono dopo il commit più recente dall'altra parte, quindi non è necessario unire alcuna fusione. Questo sta dicendo che è necessario unire le modifiche prima di poter spingere.


8

in questo caso potresti voler usare la forza con l'operazione push

git push origin master --force


1
È sbagliato. la fonte totale di github verrà eliminata e
inviata

6

Non fare mai una git -fcosa pushda fare in quanto può provocare conseguenze disastrose in seguito.

Devi solo fare una git pulldelle tue filiali locali.

Ex:

git pull origin 'your_local_branch'

e quindi fare un git push


0

È necessario unire e risolvere il problema conflicts locallyprima di inviare le modifiche al repository / fork remoto.

1) pull (recupera e unisci)

$ git pull remote branch 

2) Spingere le modifiche

$ git push remote branch 

Tuttavia hai una scelta rapida da pushforzare utilizzando l' --forceopzione, ma dovrebbe essere evitato in quanto potrebbe causare perdite di modifiche o influire negativamente su altri contributori.

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.