git cherry-pick
è un potente comando che permette ai commit Git arbitrari di essere prelevati per riferimento e aggiunti all’attuale HEAD di lavoro. Cherry picking è l’atto di prendere un commit da un ramo e applicarlo ad un altro. git cherry-pick
può essere utile per annullare i cambiamenti. Per esempio, diciamo che un commit è accidentalmente fatto nel ramo sbagliato. Puoi passare al ramo corretto e prelevare il commit dove dovrebbe appartenere.
Quando usare git cherry pick
git cherry-pick
è uno strumento utile ma non sempre una buona pratica. Cherry picking può causare commit duplicati e molti scenari in cui cherry picking funzionerebbe, sono invece preferite le fusioni tradizionali. Detto questo git cherry-pick
è uno strumento utile per alcuni scenari…
Collaborazione di squadra.
Spesso una squadra si trova a lavorare con singoli membri o intorno allo stesso codice. Forse un nuovo prodotto ha un componente backend e uno frontend. Ci può essere del codice condiviso tra i due settori del prodotto. Forse lo sviluppatore backend crea una struttura di dati che anche il frontend dovrà utilizzare. Lo sviluppatore frontend potrebbe usare git cherry-pick
per scegliere il commit in cui questa ipotetica struttura dati è stata creata. Questo prelievo permetterebbe allo sviluppatore frontend di continuare a progredire sul proprio lato del progetto.
Bug hotfixes
Quando viene scoperto un bug è importante fornire una correzione agli utenti finali il più velocemente possibile. Per uno scenario di esempio, diciamo che uno sviluppatore ha iniziato a lavorare su una nuova funzionalità. Durante lo sviluppo di questa nuova caratteristica identifica un bug preesistente. Lo sviluppatore crea un commit esplicito per correggere questo bug. Questo nuovo commit di patch può essere prelevato direttamente dal ramo master
per correggere il bug prima che abbia effetti su altri utenti.
Annullamento dei cambiamenti e ripristino dei commit persi
A volte un ramo feature
può diventare vecchio e non essere unito a master
. A volte una richiesta di pull potrebbe essere chiusa senza essere fusa. Git non perde mai quei commit e attraverso comandi come git log
e git reflog
possono essere trovati e ripresi in vita.
Come usare git cherry pick
Per dimostrare come usare git cherry-pick
assumiamo di avere un repository con il seguente stato del ramo:
a - b - c - d Master
\
e - f - g Feature
git cherry-pick
l’uso è semplice e può essere eseguito come:
git cherry-pick commitSha
In questo esempio commit
Sha è un riferimento di commit. Puoi trovare un riferimento di commit usando git log
. In questo esempio abbiamo costruito diciamo che vogliamo usare il commit `f` in master
. Prima ci assicuriamo che stiamo lavorando sul ramo master
.
git checkout master
Poi eseguiamo il cherry-pick con il seguente comando:
git cherry-pick f
Una volta eseguita la nostra cronologia Git sarà simile a:
a - b - c - d - f Master
\
e - f - g Feature
Il commit f è stato prelevato con successo nel ramo master
Esempi di git cherry pick
git cherry pick
si possono anche passare alcune opzioni di esecuzione.
-edit
Passando l’opzione -edit
git chiederà un messaggio di commit prima di applicare l’operazione di cherry-pick
--no-commit
L’opzione --no-commit
eseguirà il cherry pick ma invece di fare un nuovo commit sposterà il contenuto del commit di destinazione nella directory di lavoro del ramo corrente.
--signoff
L’opzione --signoff
aggiungerà una linea di firma ‘signoff’ alla fine del messaggio di commit del cherry-pick
In aggiunta a queste utili opzioni git cherry-pick
accetta anche una varietà di opzioni di strategia di fusione. Scopri di più su queste opzioni nella documentazione di git merge strategies.
Inoltre, git cherry-pick accetta anche input di opzioni per la risoluzione dei conflitti di merge, questo include le opzioni: --abort --continue
e --quit
queste opzioni sono trattate più in profondità per quanto riguarda git merge e git rebase.
Riassunto
Il cherry picking è un comando potente e conveniente che è incredibilmente utile in alcuni scenari. Cherry picking non dovrebbe essere usato impropriamente al posto di git merge o git rebase. Il comando git log è necessario per aiutare a trovare i commit da prelevare.