Qualcuno può fornire un semplice esempio di cosa potrebbe causare il fallimento di un push Git su un repository centrale perché non può verificarsi un avanzamento veloce? Quale dovrebbe essere il repository locale rispetto allo stato del repository centrale in modo che questo avvenga? Davvero avendo problemi a visualizzare questo ...Cosa significa che una spinta Git non può essere fusa rapidamente?
risposta
suppongo che voi state vedendo questo problema:
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to '/Users/mayoff/t/test/central'
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.
Ecco come gli “aggiornamenti non-fast-forward sono state respinte” problema accade.
Diciamo che Alice e Bob stanno lavorando a un progetto. Ognuno di loro ha un repository, e c'è un repository centrale che entrambi spingono e tirano da. Inizialmente, i tre repository simile a questa:
Ora Alice e Bob sia fare un certo lavoro. Ogni commette un cambiamento diverso per il loro repository locale:
Avanti, Alice spinge il suo cambiamento al repository centrale:
Avanti, Bob cerca di spingere. Il ramo master del repository centrale punta a commit 3. Il push di Bob tenta di aggiornarlo per puntare su commit 4. Poiché commit 4 non ha commit 3 come antenato, è necessaria un'unione, ma git push
non esegue reali fusioni. Fa solo "fast-forward", dove il nuovo maestro ha il vecchio maestro come antenato. Quindi Bob riceve l'errore perché sta cercando di spingere qualcosa che richiede una vera unione, non un avanzamento rapido.
Per spingere con successo, Bob deve prendere prima il nuovo commit dalla repo centrale:
e deve unire le sue modifiche (commit # 4) con i cambiamenti di Alice (commettono # 3) , creando un nuovo commit che ha sia impegna come antenati:
fetch e merge può essere fatto in due comandi (git fetch
seguite da git merge
) o in un comando (git pull
).
Ora Bob può spingere con successo, perché il repository centrale rileva che il nuovo master ha il vecchio master come antenato.
noti che ora Alice manca commit di Bob. Se si impegna di più sul suo repository e cerca di spingere prima di prelevare dal repository centrale, otterrà l'errore di non avanzamento veloce, e lei dovrà recuperare e unirsi per risolverlo, proprio come ha fatto Bob.
Ho appena realizzato che tutte le mie frecce indicano la direzione sbagliata. Oh bene.Spero sia abbastanza chiaro. –
Bene, ora mostrano lo sviluppo nel tempo e non l'albero del git. Anche questo non è male. – erikbwork
consistenza è la chiave. e indicando la direzione del tempo che avanza potrebbe effettivamente essere più comodo per alcune persone. – araqnid
Basta fare un commit sul repository centrale sullo stesso ramo senza tirare a quello locale. Quindi esegui il commit localmente e prova a spingere.
- 1. Che cosa significa FETCH_HEAD in Git?
- 2. Che cosa significa "modello di classe non specializzato non può essere utilizzato come argomento modello" significa?
- 3. Cosa significa che "Lisp può essere scritto in sé stesso?"
- 4. Che cosa significa "Può essere un pacchetto locale"? (Ispezione IDEA)
- 5. Che cosa significa "Contratto non può essere nel blocco try" significa?
- 6. che cosa significa raggiungibile/irraggiungibile in git?
- 7. Cosa significa crockford quando dice che un indefinito non può essere un valore di una proprietà?
- 8. Che cosa significa "git checkout -." fare?
- 9. Che cosa significa per una funzione hash essere incrementale?
- 10. Che cosa significa git "warning current check out branch"?
- 11. Cosa significa "git +" nell'URL?
- 12. Cosa significa^{} in git?
- 13. Che cosa significa "operatore = deve essere un membro non statico"?
- 14. Che cosa significa "non può uscire dal contenuto indicizzato"?
- 15. In "git checkout - files", cosa significa "-" significa?
- 16. inscatolato tipo sottostante Null può essere fusa al enum ma scatolato tipo enum non può essere lanciato per tipo nullable
- 17. Che cosa significa che REST dovrebbe essere guidato da ipertesto?
- 18. Che cosa significa _branch_match_id?
- 19. Che cosa significa pre-incrementare $ # array?
- 20. Che cosa significa Material.alphaTest?
- 21. Che cosa significa "Sorgente dati non può essere vuota. Usa: memoria: per aprire un database in memoria" significa?
- 22. Che cosa significa "I componenti della funzione stateless non possono essere referenziati" significa?
- 23. Che cosa significa in realtà l'output di git pull?
- 24. cout - che cosa significa?
- 25. Che cosa significa "sys.argv"?
- 26. Che cosa significa SKU?
- 27. Che cosa significa scalabilità?
- 28. Che cosa significa information_schema.TABLES.DATA_FREE significa in MySQL?
- 29. Che cosa significa "=>"?
- 30. Che cosa significa "ulimit -l"?
Ottima domanda! Molte persone non lo capiscono, ma la maggior parte delle domande che ho trovato non sono scritte bene. – erikbwork