2014-09-16 12 views
6

Sto avendo la mia prima introduzione a git attraverso una classe che sto prendendo. Ho un numero di file in una directory sul mio computer e sono in grado di metterli in scena e commetterli senza problemi. Tuttavia, quando provo a spingere i file al mio repository GitHub, continuo a ricevere questo messaggio:Errore Git Giving "fetch first" quando si tenta di spingere

Pushing to https://github.com/BigMeanCat/CMDA 
To https://github.com/BigMeanCat/CMDA 
! [rejected]  master -> master (fetch first) 
error: failed to push some refs to 'https://github.com/BigMeanCat/CMDA' 
hint: Updates were rejected because the remote contains work that you do 
hint: not have locally. This is usually caused by another repository pushing 
hint: to the same ref. You may want to first integrate the remote changes 
hint: (e.g., 'git pull ...') before pushing again. 
hint: See the 'Note about fast-forwards' in 'git push --help' for details. 

Qualcuno può aiutarmi con ciò che questo significa e come risolvere il problema? Ho visto alcune persone con problemi simili online, ma sono BRAND NEW per git e non ancora abbastanza familiare con il linguaggio a linea di comando di git. Sono un po 'titubante nel prendere alcuni suggerimenti, perché non so se risolverà il problema o peggiorerà la situazione.

Grazie!

+4

La soluzione è in il messaggio di errore stesso –

+0

Ci sono alcune differenze sul master su github e per prima cosa è necessario recuperarle; quindi basta fare un 'git fetch' prima di fare il' git push origin master ' – sop

+1

@sop Solo un git fetch non è sufficiente, deve anche unire/rebase le modifiche. –

risposta

2

Significa che qualcuno ha inviato lavoro al repository remoto, per unirlo con il proprio lavoro è possibile eseguire git pull --rebase quindi inviare nuovamente il lavoro combinato al repository remoto.

+1

L'OP è nuovo a Git. Non consiglierei un comando così "avanzato" come 'git pull --rebase' a un principiante. – Jubobs

+1

@Jubobs Penso che questo sia il modo più semplice per gestire una potenziale unione. –

+0

Forse, ma potrebbe anche confondere l'OP, in una fase così precoce del suo apprendimento Git. Ad ogni modo, penso che ci manchino informazioni critiche, qui. Dovremmo aspettare che l'OP ci fornisca maggiori dettagli su cosa ha fatto. – Jubobs

12

Qualcun altro (o su un'altra macchina) ha inviato un changeset al repository remoto. Tu, sul tuo computer locale, non hai ancora quei cambiamenti. Quindi, per risolvere la situazione in primo luogo deve

git pull 

e poi

git push 

Tuttavia, è solito essere in grado di git pull mentre avete cambiamenti nel vostro albero di lavoro, in modo da prima di tirare/push, è prima devi commit o stash le tue modifiche locali. Questo, potenzialmente, potrebbe portare a una situazione di unione se le modifiche remote si sovrappongono a quelle locali.

+0

Grazie! Ho capito il mio problema e l'ho spiegato in alcuni dei commenti sopra, ma git pull e git push erano esattamente ciò di cui avevo bisogno. – FizzikalGrafiti

0

Quando inizi a lavorare con git, puoi dare un'occhiata un po 'alla documentazione: http://git-scm.com/doc. Dalla tua descrizione capisco, hai un repository esistente con i file che sono condivisi con gli altri compagni di classe. Quindi è necessario prima tirare l'intero progetto (con tutti i file). Avere una versione aggiornata del progetto nel proprio repository locale, è possibile inviare modifiche al commit al repository.

+0

Grazie. Prima avevo cercato questo manuale, ma sto ancora cercando di capire cosa sta succedendo. Sto lavorando con un gruppo di altri studenti, ma non ho dato loro i permessi per lavorare con i miei file o per spingere nel mio repository. Quando tiro, sto facendo una richiesta di pull sul repository remoto o dalla riga di comando dalla directory locale che contiene i miei file (il mio repository locale, presumo)? Il repository locale deve avere lo stesso nome del repository locale? – FizzikalGrafiti

+0

Il repository ** local ** deve avere lo stesso nome (cioè il nome della cartella) e la struttura dei file deve essere uguale a quella del repository ** remote **. Il comando git pull farà l'aggiornamento del tuo repository locale, quindi è esattamente lo stesso del repository remoto. – Mateusz

7

Ho ricevuto lo stesso errore, quindi ho risolto questo argomento con il comando "--force" utilizzato. In breve, scrivi questo comando;

git push origin master --force 

Attenzione: Probabilmente, si è tentato di fare spingere i codici di più e più volte prima, è per questo che hai preso questa soluzione error.My sovrascrivere con forza con il vostro di modifiche. Con questo metodo il tuo repository potrebbe causare la mancata corrispondenza tra le persone. Ma se lavori da solo (non come un gruppo di lavoro), così puoi usare facilmente "--force" come ho detto sopra.

1

@tunacy ha detto bene.

qualcuno ha commesso repository, in modo che solo bisogno di fare

git pull 

e

git push 

questo è tutto è anche possibile utilizzare

git merge 

per l'unione

+0

prega per l'anima povera del questionario in attesa di questa risposta per 2+ anni :) – agg3l

2

È possibile risolvere il problema con il comando.

git push origin master --force 
+0

Questo esclude la restrizione 'git push'. Non raccomandato per il lavoro di squadra. Dalla documentazione git: Se qualcun altro ha costruito sopra la tua cronologia originale mentre stai ricalcando, la punta del ramo sul telecomando potrebbe avanzare con il suo commit, e spingendo ciecamente con --force ** perderà il lavoro **. – Casey

0

git pull è una buona opzione

Ma anche: git push origin maestro --force comando alla fine aiuterà se il problema persiste