master rifiutato -> master (non avanzamento rapido)


218

Sto cercando di inviare il mio progetto (tutti i file in un nuovo repository). Seguo i passaggi ma quando premo git push -u origin masterottengo questo errore:

! [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.

Ho ricevuto questo errore molte volte e non riesco a capire cosa fare.


4
Se sei sicuro che il tuo master locale abbia le ultime modifiche che desideri sul telecomando, allora fai git push --force
IgorGanapolsky il

34
git push --force <remote_repository>ha funzionato per me.
Sorter

@Sorter - Ho avuto lo stesso problema tutto il giorno, questo mi ha aiutato !! Grazie. Ma non fornisce una spiegazione sul perché il problema si sia verificato in primo luogo e perché la correzione ha funzionato.
Padawan,

1
@pmr, chiedendo solo in modo irriverente se l'OP "leggere il messaggio di errore" non aiuta affatto. Ovviamente, il messaggio di errore non ha avuto alcun senso per l'OP, così come non ha fatto alcun messaggio per me o per le altre 66 persone che hanno votato il suo post. Snarky, più spiritoso del però non aiuta affatto le persone.
Padawan,

3
@Padawan Noterai anche che questa "persona furba e spiritosa" ha fornito la risposta accettata per questa domanda e 72 persone (probabilmente incluso te) l'hanno trovata utile. Mi dispiace che il mio commento sia stato ritenuto arrogante, ma sarebbe stata la mia prima domanda se mi avessi fatto anche in un contesto professionale. A volte fermarsi e impiegare un minuto per leggere attentamente il messaggio di errore a volte fa miracoli. L'ho fatto per me quando ho visto quell'errore per la prima volta.
pm

Risposte:


160

Come dice il messaggio di errore: git pullprima di provare git push. Apparentemente la tua filiale locale non è sincronizzata con la tua filiale di tracciamento.

A seconda delle regole del progetto e del flusso di lavoro, potresti anche voler utilizzare git pull --rebase.


1
mi mostra questa unione automatica README.md Unione automatica fallita; correggere i conflitti e quindi eseguire il commit del risultato.
Asantoya17,

1
@ Asantoya17 Le modifiche apportate al master remoto sono in conflitto con le modifiche. Rivedere il file e rivederli. Quindi eseguire il commit dei risultati della risoluzione. Si prega di ottenere un tutorial o un libro o almeno leggere i messaggi.
pm

1
Cosa significa pull? Ti consente di inviare un file o di recuperarlo e scaricarlo dal sito Web del repository? (es. Bit Bucket)
David Dimalanta,

4
@AndrewS git push --force origin master. Se incontri questo tipo di problemi più di una volta nella vita, il flusso di lavoro del tuo progetto si interrompe. Le funzionalità dovrebbero essere sviluppate in filiali e unite senza avanzamento rapido e se una funzione ha "fallito", è necessario ripristinare il commit di unione (preferibilmente eseguire i test in un ramo di integrazione prima di unire una funzionalità al master). Nessuna idea su Eclipse però.
pm

1
Cosa fare se l'errore viene segnalato git pull origin trunk:master?
Andry,

175

AVVISO: questo non è mai un uso raccomandato di Git. Questo sovrascriverà le modifiche sul telecomando. Fallo solo se sai al 100% che le tue modifiche locali devono essere inviate al master remoto.

Prova questo: git push -f origin master


47
No, non provarci. Da git help push: "Ciò può causare il commit del repository remoto; utilizzarlo con cura."
jcsahnwaldt Reinstate Monica,

7
sicuramente non farlo
Lluís,

14
questo ha funzionato per me. Ho pensato che fosse OK perché il mio unico impegno su Github era quello creato con un nuovo repository. Probabilmente è una buona idea non usarlo dopo l'inizio di un progetto.
Matthew Moore,

1
può essere utile se si desidera aggiornare un repository che è stato creato a scopo di consegna (quindi nessuna nuova modifica sul lato remoto)
HiB,

Ho appena usato questo come ho appena fatto un commit, sincronizzato con GitHub, quindi desideravo aver aggiunto un altro file a quel commit. Quindi l'ho annullato localmente, ho eseguito il comando sopra per cancellarlo da GitHub, quindi ho eseguito nuovamente il commit a livello locale, quindi sincronizzato. Tutto bene adesso! Intendiamoci, sapevo per certo che nessun altro impegno era stato fatto in quel ramo.
zeMinimalist,

18

questo comando ha funzionato bene per me

git push -f origin master

3
Fai attenzione prima di usare questo comando. Usando questo comando perderai tutti i tuoi impegni passati.
twenk11k,

-f significa forzare la spinta
maheshmnj

@maheshmnj Sì!
testuser

15

Ho appena ricevuto questo errore.

Ho creato un repository github dopo aver creato il mio repository git locale, quindi ho dovuto accettare le modifiche in local prima di inviare a github. In questo caso, l'unica modifica è stata il file Leggimi creato come passaggio facoltativo durante la creazione del repository github.

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

l'URL del repository è ottenuto da qui nella pagina github del progetto:

inserisci qui la descrizione dell'immagine

Ho quindi reinizializzato (potrebbe non essere necessario)

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

Quindi premere:

git push

3
Questa risposta riflette lo scenario del caso reale.
kta,

9

avevo creato un nuovo repository in github e avevo lo stesso problema, ma aveva anche problemi durante il pull, quindi ha funzionato per me.

ma questo non è consigliato nei repository che hanno già molti codici in quanto ciò potrebbe rovinare tutto

git push origin master --force

Questa risposta è già stata fornita: stackoverflow.com/a/16374574/1771479 e non è consigliabile farlo.
Agold

9

AVVERTIMENTO:

Scegliere un " git pull" non è SEMPRE una soluzione, quindi fai attenzione. È possibile che si verifichi questo problema (quello menzionato nella Q) se si è intenzionalmente modificata la cronologia del repository. In tal caso, git confonde le modifiche della cronologia con nuove modifiche nel repository remoto. Quindi, dovresti optare per un git push --force, perché la chiamata git pullannullerà intenzionalmente tutte le modifiche che hai apportato alla tua cronologia.


8

Se il git pullproblema persiste, probabilmente hai inviato le modifiche (A) e successivamente hai git commit --amendaggiunto altre modifiche (B). Pertanto, git pensa di poter perdere la cronologia: interpreta B come un commit diverso nonostante contenga tutte le modifiche rispetto ad A.

             B
            /
        ---X---A

Se nessuno cambia il repository dopo A, allora puoi farlo git push --force.

Tuttavia, se ci sono cambiamenti dopo Adall'altra persona:

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

quindi devi ribattere che le persone cambiano da Aa B( C-> D).

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

o risolvi il problema manualmente. Non ho ancora pensato a come farlo.


7

usa questo comando:

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

piace:

git pull --allow-unrelated-histories origin master

questo errore si verifica quando i progetti non hanno antenati comuni.


7
git push -f origin master

usa la forza bruta ;-) Molto probabilmente stai provando ad aggiungere una cartella locale che hai creato prima di creare il repository su git.


2
Qualsiasi risposta, incluso questo, dovrebbe dare un avvertimento.
D. Ben Knoble

1
Ho provato questo e mi è costato un sacco di commit su GitHub che ho dovuto ripristinare da un altro clone locale del repository. Pericoloso.
Paflow,

6

Questo perché hai apportato alcune modifiche al tuo master, quindi il progetto ti chiede di tirare per primo. Se vuoi spingerlo comunque puoi usare la forza bruta digitando questo:

git push -f origin master

Ricorda di eseguire prima il commit delle modifiche:

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


4

Devi fare

git branch

se l'output è simile a:

* (no branch)
master

Quindi fa

git checkout master

Assicurati di non avere alcun commit in sospeso poiché il check out perderà tutte le modifiche non impegnate.


4

! [rifiutato] master -> master (non avanzamento rapido)

Non fatevi prendere dal panico, questo è estremamente facile da risolvere. Tutto quello che devi fare è emettere un pull e il tuo ramo sarà veloce:

$ git pull myrepo master

Quindi riprova a premere e tutto dovrebbe andare bene:

$ git push master github


4

Questo è successo a me quando ero sul ramo di sviluppo e il mio ramo principale non è con l'ultimo aggiornamento.

Quindi, quando ho provato a spingere dal ramo di sviluppo ho avuto quell'errore.

L'ho risolto passando al ramo master, git pull, quindi torno indietro per sviluppare branch e git push.

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

3

Ho avuto questo problema su una macchina di sviluppo. Il devramo stava spingendo bene ma il masterramo mi ha dato (mentre git pushing quando sono sul devramo):

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

Quindi ho provato:

git checkout master
git pull

Che mi ha dato:

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.

Ho scoperto che mancava il ramo principale e ho .git/configaggiunto:

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

Successivamente git pushha funzionato bene anche sul devramo.


2

Il mio telecomando non era sincronizzato con il locale, quindi ha funzionato per me

git pull --rebase

e assicurati che quando lo fai di git pullnuovo dovrebbe essere già aggiornato e ora sei pronto per spingere verso l'origine

supponendo che tu abbia già git remote add origin remote repository URL

fare

`git push origin master`  

La schermata dice tutto inserisci qui la descrizione dell'immagine

In alternativa puoi farlo

  1. git stash (memorizza temporaneamente il lavoro non sottoposto a commit)
  2. git pull (sincronizza locale e remoto)
  3. git stash pop (ripristina le modifiche non impegnate)
  4. git push

1

Ho avuto lo stesso problema. Uso Git Totoise. Basta fare clic destro -> TotoiseGit -> Pulizia. Ora puoi spingere su Github Ha funzionato bene con me: D


1

Questo perché hai apportato modifiche contrastanti al suo master. E il tuo server di repository non è in grado di dirtelo con queste parole, quindi dà questo errore perché non è una sua questione gestire questi conflitti per te, quindi ti chiede di farlo da solo. Come ?

1- git pull Questo unirà il tuo codice dal tuo repository al tuo codice del tuo master del sito. Quindi vengono mostrati conflitti.

2- trattare questi conflitti manualmente.

3-

git push origin master

E presto, il tuo problema è stato risolto.


0

L'unico che sono stato in grado di risolvere questo problema era eliminare il repository locale e git e crearlo di nuovo ad entrambe le estremità. Funziona bene per ora.


Conservo sempre un backup del mio repository git su Dropbox. In questo modo non devo eliminare il repository locale, copio e incolla le directory rilevanti da Dropbox quando si presenta la situazione.
IgorGanapolsky,

0

Se qualcuno ha questo errore durante il tentativo di spingere su heroku, sostituisci semplicemente 'origine' con 'heroku' in questo modo: git push -f heroku master



0

Ciò può anche essere causato a causa di un errore di nome causato durante l'assegnazione del nome al Repo. Se una delle risposte di cui sopra non ha funzionato. Questo ha funzionato per me:

Elimina quel repository e creane uno nuovo e prova di nuovo i seguenti comandi:

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

se aggiungi origine mostra già esiste utilizzare questo invece:

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