git cherry-pick è uno strumento semplice ma potente che ti consente di selezionare in modo selettivo trasferire i commit da un ramo all'altro. Puoi usarlo quando non vuoi unire un intero branch in master, ma desideri comunque includere le modifiche da un feature branch.
Cos'è Git Cherry Pick e come funziona?
In Git, i commit sono le unità che tengono traccia delle modifiche nel tempo. Ogni commit potrebbe rappresentare una correzione di bug, una nuova funzionalità o parte di una soluzione più ampia. Puoi pensare che i commit vengano archiviati come una lista collegata che punta indietro nel tempo; ogni volta che cambi il tuo ramo HEAD, Git ricostruisce i file della tua directory locale tenendo conto di tutti i commit che tornano all'inizio.
Questa è una semplificazione ovviamente e Git tecnicamente non memorizza i commit come semplici elenchi di modifiche, utilizza blob basati su file, ma il principio è lo stesso.
Le cose si complicano quando vengono coinvolte le filiali. Spesso, il lavoro su una funzionalità richiede molti giorni o settimane. Invece di ingombrare il repository principale, va in un ramo di funzionalità separato, quindi viene rivisto il codice e unito di nuovo. L'unione è fondamentalmente ramificando questa cronologia di commit in modo che l'intero ramo di funzionalità venga incluso quando Git fa il suo lavoro.
Tuttavia, cosa succede se vuoi unire alcune cose, ma non 8217; non vuoi che l'intero ramo sia già incluso? Non puoi fare git merge in quel caso.
Pubblicità
È qui che diventa utile git cherry-pick. Fa ciò che suggerisce il nome—prende un singolo commit dal ramo delle funzionalità, lo seleziona individualmente e lo applica al ramo principale o viceversa. Questo copia il commit, in modo che ci sia un commit nuovo di zecca sul ramo di destinazione.
Nota che non esiste una vera “line” connettendo il nuovo commit sul ramo master al vecchio commit. Il nuovo commit selezionato creato sul master non fa affatto riferimento al commit di origine, il commit viene semplicemente copiato. Git se ne occuperà quando fonderai di nuovo i rami, perché i commit sono visti come copie l'uno dell'altro.
In effetti, il commit è “trasferito” al nuovo branch, anche se dovrai tenere a mente che il vecchio commit è ancora applicato al feature branch. Tuttavia, non vorrai ripristinare il commit di origine, poiché ciò causerà problemi durante la fusione in seguito.
Perché Cherry Pick?
Ci sono alcuni casi d'uso per questo. Forse stai lavorando su una funzionalità e non è pronta per il rilascio, ma hai corretto un bug nel ramo delle funzionalità che vorresti inserire nella tua versione di rilascio settimanale. Puoi usare cherry-pick per copiare la correzione di bug su Master per distribuirla in anticipo.
O forse hai più rami per la produzione e lo sviluppo e desideri copiare una correzione di bug urgente da produzione allo sviluppo. Anche il plettro può farlo.
Oppure potresti aver anche solo accidentalmente effettuato un commit nel ramo sbagliato. Puoi usare git cherry-pick per copiarlo in quello giusto, quindi git reset per annullare quel commit (a condizione che si trovi nell'HEAD del ramo).
Utilizzare Git Cherry Pick
Una volta capito cosa stai facendo, git cherry-pick è piuttosto semplice da usare.
Pubblicità
Il modo più semplice per visualizzare la cronologia dei commit di Git sulla riga di comando è con il seguente comando, che mostra tutti i commit ma con un ramo e una cronologia di unione, che è cruciale per l'utilizzo di cherry-pick:
git log – -pretty=format:”%h %s” –graph
Quindi , puoi semplicemente copiare l'hash SHA1 del commit ed eseguire il cherry pick:
git cherry-pick 1da76d3
Nota che puoi anche cherry pick più commit contemporaneamente, basta passare più hash.
git cherry-pick ha alcune opzioni utili:
- –no-commit applica solo le modifiche alla tua directory. Dovrai eseguire lo stage e il commit manualmente.
- –edit ti consentirà di modificare il messaggio di commit.
- -x aggiungerà un messaggio che dice “cherry pick from commit: …”
Naturalmente, se stai utilizzando un client Git basato su GUI come Fork o GitKraken, che consigliamo vivamente, puoi semplicemente fare clic con il pulsante destro del mouse su il commit e scegli di selezionarlo: