2014-09-08 12 views
5

Sto cercando di spingere impegna ad un telecomando e ottenere questo messaggio di errore:Come risolvere problema in Git: "Aggiornamenti sono stati respinti perché una punta ramo spinto è dietro la sua controparte remota"

$ git push origin master 
To [email protected]:hbrosuru.git 
! [rejected]  ab68c0485d -> master (non-fast-forward) 
error: failed to push some refs to '[email protected]:hbrosuru.git' 
hint: Updates were rejected because a pushed branch tip is behind its remote 
hint: counterpart. Check out this branch and 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. 

penso Mi sono confuso da qualche parte spingendo più filiali locali a questo singolo ramo remoto e mi piacerebbe fondamentalmente cancellare ciò che è sul server e spingere un intero ramo da fresco. È possibile o esiste un modo migliore per correggere questo errore?

Ps. questo ramo remoto è ospitato su Fortrabbit quindi non ho pieno accesso al server per eliminare semplicemente il ramo e crearne uno nuovo perché il meccanismo di implementazione di Fortrabbit è basato su Git.

+0

Il comando 'git push -f' funziona? Ciò sovrascriverà forzatamente il ramo con qualunque cosa stiate spingendo ora. Ma è possibile disabilitarlo dal server, quindi devi provare e vedere. –

+1

Inoltre, quale ramo vuoi essere? Notate questa riga: 'ab68c0485d -> master (non-avanti veloce)' - ciò significa che non siete su un ramo, poiché il vostro HEAD corrente viene chiamato da un hash di commit ('ab68c0485d') invece di un nome di ramo ('master'). Se vuoi che l'attuale HEAD sia il nuovo master, usa 'git branch -f master ab68c0485d && git checkout master' e prova la tua spinta. –

+0

Possibile duplicato di http://stackoverflow.com/questions/10298291/cannot-push-to-github-keeps-saying-need-merge – Adil

risposta

8

Mi piacerebbe sostanzialmente cancellare cosa c'è sul server e spingere un intero ramo da fresco.

Questo probabilmente significa un push forza . Si noti che la forza di spinta non è generalmente una cosa sicura da fare, e in particolare dovrebbe essere evitata quando si preme su un repository di codice sorgente condiviso come GitHub. Ma in questa situazione, dove si sta spingendo per aggiornare un server PaaS, è probabile che vada bene.

Potrebbe essere necessario visualizzare graficamente le filiali utilizzando gitk, git log --all --graph --decorate o qualche altro strumento prima di forzare lo spingo, solo per assicurarsi che tutto sia come previsto.

Per forza di spinta tuo master filiale locale in ramo vostro origin del telecomando master, gestita

git push --force-with-lease origin master:master 

L'argomento --force-with-lease farà sì che la spinta forza per avere successo solo se la vostra filiale locale è aggiornato rispetto a quello stai spingendo a. (Ciò evita la sovrascrittura accidentale di commit che non conosci.) I fortemente consigliano di utilizzare la variante with-lease ogni volta che è possibile anziché il vecchio argomento --force, che è meno sicuro.

+2

Per reiterare per le persone che sono arrivate qui solo dall'errore generale, probabilmente ** don 't ** vuole forzare il push a meno che tu non sia nella situazione specifica dell'OP. Se stai condividendo un repository con più altre persone e ricevi questo errore, c'è una buona possibilità che tu sia legittimamente dietro e dovresti risolvere il conflitto prima tirando il ramo remoto, risolvendo eventuali conflitti di fusione, * poi * spingendo. – Sean

+0

Ho avuto un problema simile. Io sono l'unico che usa il repository dato e ho finito con l'abortire un rebase e forzare un push ('-f') e poi sono tornato in pista. –