Come spostare commit da un branch ad un altro con Git

Cerca

In questo articolo vediamo in dettaglio tutti i passaggi necessari per spostare uno o più commit da un branch ad un altro. È infatti questa una attività spesso spinosa da condurre perché si vuole avere certezza di non perdere il proprio lavoro fatto. Seppur esistano molteplici modi che permettono di spostare i commit tra un branch ed un altro, questa guida riporta la mia personale selezioni di comandi, scelti per semplicità ed efficacia.

Spostare commit da branch A a branch B

Nello scenario di esempio abbiamo il branch master che è composto da quattro commit. Il seguente schema descrive la situazione iniziale

				
					A-B-C-D-E (HEAD)
        ↑
      master
				
			

Abbiamo poi un secondo branch denominato develop che si presenta nel seguente modo

				
					A-B (HEAD)
  ↑
develop
				
			

Vogliamo ora spostare i commit C, D ed E dal branch master al branch develop. Per fare ciò ricorriamo anzitutto al comando git log per estrarre gli hash dei commit che vogliamo spostare

				
					git log
				
			

Ed otteniamo un output simile al seguente

				
					commit 0eba09233d4fe4fa5986fb89ce9076ed3d3f89d6 (HEAD -> master, origin/master, origin/HEAD)
Author: Alessandro Masciadri
Date:   Tue Oct 31 17:47:50 2023 +0100
    E
commit b1e29b4498c097f7231d99532592e9ccee55df24
Author: Alessandro Masciadri
Date:   Tue Oct 31 17:47:40 2023 +0100
    D
commit a17f0cc9b0268365ee6c1ec84bf4eb17f5c795f5
Author: Alessandro Masciadri
Date:   Tue Oct 31 17:47:30 2023 +0100
    C
commit a66d0db4da4966a1342538a02edbee09692ee633
Author: Alessandro Masciadri
Date:   Tue Oct 31 17:47:20 2023 +0100
    B
commit 2b571875217bdd166df9fe86d24c608769fb6336
Author: Alessandro Masciadri
Date:   Tue Oct 31 17:47:10 2023 +0100
    A
				
			

Spostiamoci ora sul branch target, ossia dove si vogliono spostare i commit

				
					git checkout develop
				
			

E ora utilizziamo il comando git cherry-picking per applicare in sequenza e in questo ordine i commit C, D ed E al branch develop. Il primo che andiamo ad applicare è il commit C

				
					git cherry-pick a17f0cc
git cherry-pick b1e29b4
git cherry-pick 0eba092
				
			

A questo punto la nuova situazione dei due branch master e develop è la seguente

				
					A-B-C-D-E (HEAD)
        ↑
      master
				
			
				
					A-B-C-D-E (HEAD)
        ↑
     develop
				
			

Non resta che rimuovere dal branch master i commit che abbiamo appena spostato. Torniamo quindi nel branch master con il seguente comando

				
					git checkout master
				
			

E lanciamo il seguente comando per rimuovere gli ultimi tre commit (C, D ed E)

				
					git reset --hard HEAD~3
				
			

Siamo ora pronti per pushare tutto sul nostro repository remoto con il seguente comando

				
					git push -f
				
			

La situazione finale dei branch master e develop sarà quindi la seguente

				
					A-B (HEAD)
  ↑
master
				
			
				
					A-B-C-D-E (HEAD)
        ↑
     develop
				
			

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.

Most Recent

Come cambiare il server DNS su Ubuntu

Cambiare il server DNS usato da Ubuntu è un’operazione piuttosto semplice, ma che comunque deve essere condotta con attenzione. Vediamo quindi in questo articolo come

Partners