Cosa fare con commit fatto in una testa distaccata

Usando git ho fatto qualcosa del genere

git clone git checkout {a rev number tree rev before} (here i started to be in a detached head state) //hacking git commit //hacking git commit (some commit where made on origin/master) git pull (wich does complete because there was some error due to the fact that i'm no more on master) 

Perché mi ha detto che posso commettere un acciaio quando sono in uno stato di testa distaccato, l’ho fatto. Ma ora voglio unire il mio ramo di testa distaccato e il mio ramo master locale, e poi spingere il mio gruppo di modifiche in origine / master.

Quindi la mia domanda è: come posso unire il ramo master con il mio stato attuale (testa storta)

Crea un ramo in cui ti trovi, quindi passa a master e uniscilo:

 git branch my-temporary-work git checkout master git merge my-temporary-work 

Potresti fare qualcosa di simile.

 # Create temporary branch for your detached head git branch tmp # Go to master git checkout master # Merge in commits from previously detached head git merge tmp # Delete temproary branch git branch -d tmp 

Sarebbe anche più semplice

 git checkout master git merge [email protected]{1} 

ma questo ha il leggero pericolo che se fai un errore, può essere un po ‘più difficile recuperare i commit fatti sulla testa staccata.

Puoi semplicemente fare git merge o git cherry-pick ...

Come suggerito da Ryan Stewart, puoi anche creare un ramo dall’attuale HEAD:

 git branch brand-name 

O solo un tag:

 git tag tag-name 

Questo è quello che ho fatto:

Fondamentalmente, pensa al detached HEAD come a un nuovo ramo, senza nome. Puoi impegnarti in questo ramo proprio come qualsiasi altro ramo. Una volta che hai finito di impegnarti, vuoi spingerlo al telecomando.

Quindi la prima cosa che devi fare è dare a questo detached HEAD un nome. Puoi farlo facilmente, mentre sei su questo detached HEAD :

 git checkout -b some-new-name 

Ora puoi spingerlo in remoto come qualsiasi altro ramo.

Nel mio caso, volevo anche far avanzare velocemente questo ramo per padroneggiarlo insieme ai commit che avevo fatto nel detached HEAD (ora un some-new-branch ). Tutto quello che ho fatto è stato

 git checkout master 

git pull # To make sure my local copy of master is up to date

 git checkout some-new-branch 

git merge master // This added current state of master to my changes

Certo, l’ho unito in seguito per master .

Questo è tutto.

In caso di HEAD distaccato, il commit funziona normalmente, tranne che nessun ramo nominato viene aggiornato. Per ottenere il ramo principale aggiornato con le modifiche apportate, creare un ramo temporaneo in cui ci si trova (in questo modo il ramo temporaneo avrà tutte le modifiche apportate che sono state apportate nell’HEAD distaccato), quindi passare al ramo principale e unire il ramo temporaneo con Il capo.

 git branch temp git checkout master git merge temp 

Ho anche fondato un articolo in cui viene spiegato come elaborare. Lo aggiungo perché è un po ‘diverso da quello che è stato proposto. Ma penso che tutte le proposte siano valide

http://edspencer.net/2009/10/git-what-to-do-if-you-commit-to-no-branch.html

Più tardi accetterò la prima risposta come quella giusta

Forse non è la soluzione migliore, (riscriverà la cronologia) ma potresti anche eseguire il git reset --hard .

Una soluzione semplice consiste semplicemente nel creare un nuovo ramo per il commit e il checkout: git checkout -b .

In questo modo, tutte le modifiche apportate verranno salvate in quel ramo. Nel caso in cui sia necessario ripulire il ramo principale dai commit rimanenti, assicurarsi di eseguire git reset --hard master .

Con questo, riscrivi i tuoi rami quindi assicurati di non disturbare nessuno con questi cambiamenti. Assicurati di dare un’occhiata a questo articolo per una migliore illustrazione dello stato di HEAD distaccato .