devdev / in the loop

Spostare dei commit su un nuovo ramo in Git

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

 

Questo articolo ti è stato utile?
Git – LETTURA 4 MINUTI Come creare un nuovo repository Git a partire da un ramo esistente (mantenendo la cronologia)
Spesso i nostri progetti prendono vie inaspettate e tortuose. Cambiano i requisiti, o semplicemente le idee, o ancora più semplicemente…
Git – LETTURA 4 MINUTI Come visualizzare l’anteprima di un git merge
Quando ci apprestiamo ad unire due rami (branch) di un repository git, potremmo aver bisogno di avere un’anteprima di cosa…
Git – LETTURA 5 MINUTI Git: differenza tra fork e clone
Quando ci avviciniamo al mondo dell’open source, è fondamentale avere una conoscenza approfondita di git, perché in sostanza è l’unico…
Git – LETTURA 4 MINUTI GitHub Free adesso permette di creare repository privati gratis
Se siete utenti GitHub ma non avete un piano a pagamento attivo, questa sarà una buona settimana! Storicamente GitHub ha sempre offerto…
Roba figa da
if (weekend) {
    relax();
}
la nostra newsletter, ogni tanto.