Índice
1 - Qué es cherry pick en git?
Cherry pick es una funcionalidad de Git que nos permite coger un commit de un branch y aplicarlo en otro branch.
Cuando hacemos cherry pick
lo hacemos sobre un único commit, mientras que si hacemos merge o rebase ejecutaremos la acción sobre varios commits.
2 - Cuando utilizar cherry pick en git?
Antes de continuar debemos tener claro que la funcionalidad de cherry pick
es muy útil en ciertos escenarios, pero en otros puede ser muy liosa, ya que puede generar commits duplicados lo que causará unos conflictos brutales.
2.1 - Hotfixes para arreglar bugs
El uso principal es cuando tenemos hotfixes, un hotfix no es ni más ni menos que un cambio el cual tenemos que poner en producción si o si, ya que ese cambio va a arreglar un bug.
Este tipo de acciones es muy común cuando tenemos release
branch, supongamos que descubrimos un bug crítico, lo arreglamos y hacemos el merge
a master, a su vez, debemos aplicarlo en el branch que está en producción ahora mismo.
Un caso común también suele ser que el developer se encuentra el bug mientras hace otra funcionalidad. lo que hace es un comit único para arreglar el bug y a su vez un cherry pick de este en el branch que está en producción.
2.2 - Aplicar commits no mergeados
Desgraciadamente no todo lo que programamos acaba en producción, muchas veces a mitad de una funcionalidad nos damos cuenta que no es necesaria o que es mejor hacerla de otra forma. Por lo que solemos borrar el branch.
Pero qué pasa, si en uno de los commits hemos arreglado un bug?
Pues no pasa nada, ya que git siempre guarda todos los commits, y aún borrando el branch tendremos acceso al commit si utilizamos su hash.
2.3 - Extra
Adicionalmente podemos especificar un rango para los cherry pick, pero como he indicado anteriormente es muy probable que tengamos problemas con los conflictos. Aún así su sintaxis es la siguiente:
git cherry-pick <gitHash>..<gitHash>
El comando hará cherry pick
de todos los commits entre el primer y el segundo hash.
3 - Ejecutar cherry pick en línea de comandos
Para ejecutar un cherry pick debemos de saber el hash del commit que queremos aplicar, en github lo podemos encontrar si vamos al historial, en la parte derecha.
Nota: también podemos ver el hash utilizando git log
en la línea de comandos.
Nos sirve con el código “pequeño” de la derecha pero si pulsamos en copiar, veremos que se nos copia un código más grande, ese también nos sirve.
Nuestro objetivo es mover el segundo commit del branch (hotfix) a nuestro branch release como podemos ver en la imagen:
Para ello nos debemos posicionar en el branch release
git checkout release1
Y ahora introducir el comando del cherry pick, recuerda tener el hash a mano
git cherry-pick <hash>
Finalmente debemos hacer git push
para enviar los cambios al servidor.
3.1 - Ejecutar cherry pick en GitHub Desktop
Desde hace un tiempo utilizo la aplicación de GitHub para tener una visual de git, hay otras opciones como Gitkraken o extensiones de visual studio, pero a mi, con la de github me sobra.
Para realizar un cherry pick en Github Desktop debemos ubicarnos sobre el branch dónde está el commit, y ahí en el historial.
Y de ahí debemos arrastrarlo con el botón izquierdo del ratón encima del branch que queremos aplicarlo
Automáticamente la interfaz nos cambiará al branch donde hemos aplicado el cherry pick y nos saldrá el botón para hacer push.
Conclusión
Cherry pick es un comando que es muy poderoso en ciertas situaciones, pero no debemos utilizarlo en reemplazo de merge o rebase.
Personalmente lo considero un comando de git avanzado, ya que requiere conocimiento de los comandos más en profundidad.
En este post hemos visto:
- Qué es cherry pick en git.
- Cuándo utilizar chery pick en git.
- Cómo ejecutar cherry pick desde la línea de comandos y desde la interfaz de github desktop