Molto spesso ci troviamo davanti a questo tipo di problema: per errore o inesperienza, eseguiamo dei commit mentre ci troviamo sul ramo sbagliato. Come facciamo a spostare gli ultimi commit su un nuovo ramo o su un ramo preesistente?
Ci troviamo in una situazione analoga a questa:
Dove gli ultimi due commit, cioè af65fcd e e577582 sono quelli da spostare su un branch diverso. Vogliamo, cioè arrivare ad una situazione analoga a questa:
Muovere commit su un nuovo ramo
Nel caso volessimo spostare gli ultimi commit su un nuovo branch , l’operazione è abbastanza semplice e non dovrebbe dare problemi.
# Creiamo il nuovo ramo git branch nuovoramo # Muoviamo il puntatore su master indietro di 2 commit git reset --hard HEAD~2 # Spostiamoci sul nuovo ramo git checkout nuovoramo
Il comando centrale di questa procedura è
git reset --hard HEAD~2
che dice sostanzialmente di spostarsi indietro di 2 commit: possiamo indicare il numero di commit che ci serve scavalcare. In alternativa, possiamo indicare l’hash del commit, se lo conosciamo, ad esempio:
git reset --hard 0bc5544
Non perderemo alcun commit, semplicemente li abbiamo staccati e associati al ramo nuovoramo.
Muovere commit su un ramo esistente
Il metodo precedente è basato sul fatto che nuovoramo è appunto un ramo creato per l’occasione. Ma se volessimo spostare gli ultimi n commit su un ramo già esistente?
In questo caso dovete effettuare prima un git merge tra il ramo e il master prima di eseguire il git reset come nell’esempio precedente. Se non lo fate perderete il vostro lavoro. Vediamo come eseguire questa procedura:
# Spostiamoci sul ramo git checkout ramoesistente # Uniamolo al master git merge master # Spostiamoci su master git checkout master # Muoviamo il puntatore su master indietro di 2 commit git reset --hard HEAD~2 # Muoviamoci nuovamente sul ramo git checkout ramoesistente