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