2015-05-27 17 views
26

Il master è a dire commit # 10. Tuttavia, ho finito per rendermi conto di aver rotto qualcosa lungo la strada che non è stato catturato dai test.Git push master fatale: non sei attualmente su un ramo

Ho finito per eseguire il commit n. 5, quindi lentamente ho ripetuto lo sviluppo di ogni commit e l'ho regolato continuamente per assicurarmi che non causasse nuovamente il bug. Ora sono essenzialmente tornato al commit # 10, ma con una serie di modifiche che impediscono il verificarsi del bug.

Ora voglio creare commit # 11 utilizzando le mie modifiche. Ma quando provo a spingere per padroneggiare ottengo

fatal: You are not currently on a branch. 
To push the history leading to the current (detached HEAD) 
state now, use 

    git push master HEAD:<name-of-remote-branch> 

Quale è da aspettarsi. Ma come faccio a spingere fino alla mia filiale remota?

ho cercato git push origin HEAD:master ma poi ottenuto questo:

! [rejected]  HEAD -> master (non-fast-forward) 
error: failed to push some refs to 'https://github.com/tomhammond/sample.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. 

Quando faccio un git status vedo HEAD detached from 4a74ac3

+0

Vi siete assicurato che la vostra storia di impegnarsi fino # 10 è quello che era in origine, e che solo il tuo commit # 11 contiene le modifiche?Un errore del genere viene normalmente dato quando il tuo ramo e il ramo di origine hanno una cronologia di commit diversa (come quello che succede quando hai rifatto lo sviluppatore di ciascuno dei commit) –

+0

Sono abbastanza sicuro che non lo facciano. Penso di aver scioccamente iniziato a fare il dev dopo aver controllato # 5 –

+0

Va bene, quello che puoi fare è 'git reset [commit10Hash]' per togliere le modifiche, quindi 'git stash' per salvarle per un po ',' git reset - -hard origin/nameofremotebranch' per resettarlo all'origine, 'git stash pop' per riapplicare le modifiche che vuoi, quindi' git add .' e 'git commit -m" Le tue nuove modifiche all'inizio dell'origine "'. Dovresti quindi essere in grado di 'git push nome origineofremotebranch' senza conflitto –

risposta

40

Ma quando provo a spingere per padroneggiare ricevo

fatal: You are not currently on a branch. To push the history leading to the current (detached HEAD)

Quale è prevedibile

Lavorare in uno stato indipendente non è a ci si può aspettare, a meno che tu non voglia deliberatamente farlo, cosa di cui dubito sia il caso tu. Invece di eseguire il commit del commit # 5, è necessario che sia stato ripristinato il ramo master a tale commit o che sia eseguito un git rebase in modalità interattiva in cui è possibile ripetere i commit come desiderato.

Detto questo, se si è certi che la versione di master nello stato indipendente è quello che si veramente desidera mantenere, allora si può andare in giro l'errore non-fast-forward, con la forza spingendo il ramo al telecomando:

git push origin HEAD:master --force 

Tuttavia, se si forza il push si corre il rischio di causare problemi a tutti gli altri utenti che hanno il ramo estratto. Una soluzione meno rischiosa sarebbe quella di creare un ramo temporaneo dalla testa staccata, e quindi unire quel ramo in master:

git branch temp-branch 
git checkout master 
git merge temp-branch 
git push origin master 
+1

Forza che spinge ad un il ramo principale può sicuramente non essere una buona idea –

+0

Ha funzionato! Nota a se stessi per non rientrare in questa situazione di nuovo, ma apprezzo l'aiuto rapido :) –

+0

@scrowler Ho aggiunto un flusso di lavoro che può utilizzare per evitare la spinta forzata. –

0

git push solo consente di avanzare rapidamente il telecomando. Questo significa che il commit che stai cercando di spingere deve essere un discendente del ramo remoto. Dato che hai modificato i precedenti commit dopo 5, non hai un discendente ma più di un cugino. È possibile dare git push --force se si desidera sovrascrivere il ramo, ma se altre persone hanno apportato le proprie modifiche sopra il master corrente, non saranno più in grado di estrarre il ramo. Inoltre, se qualcun altro spinge al master prima di te, le loro modifiche andranno perse. In genere, non si desidera forzare il push se non si è l'unico utilizzando un ramo.

+0

Grandi informazioni - In realtà sono l'unico a lavorare su questo adesso quindi penso che dovrebbe funzionare –

+0

sfortunatamente non ha funzionato però :( –

Problemi correlati