¿Qué hace `git cherry-pick` y cuándo lo usarías?
Ver respuesta — intenta responderla en voz alta primero
git cherry-pick <commit> toma un commit específico de cualquier rama y lo aplica sobre la rama actual, creando una copia de ese commit (con un hash nuevo). Lo usas cuando quieres traer un cambio puntual (por ejemplo, un fix) sin mergear toda la rama de donde viene.
A veces no quieres integrar una rama entera, solo un commit concreto. Por ejemplo: en feature hay 10 commits, pero uno arregla un bug crítico que necesitas ya en main. En vez de mergear toda feature (que aún no está lista), haces cherry-pick de ese único commit a main.
Cómo funciona: cherry-pick reaplica los cambios de ese commit sobre tu rama actual como un commit nuevo (mismo contenido, hash distinto). Pueden aparecer conflictos si el contexto es diferente, y se resuelven igual que en un merge.
# Necesito el fix del commit abc1234 (que esta en feature) aqui en main
git switch main
git cherry-pick abc1234
# Se crea en main un commit nuevo con los cambios de abc1234
# Traer varios commits especificos
git cherry-pick abc1234 def5678
# Traer un rango de commits (sin incluir el primero)
git cherry-pick abc1234..def5678
# Si hay conflicto: se resuelve, se hace git add y luego:
git cherry-pick --continue
# Si te arrepientes durante un conflicto:
git cherry-pick --abort
Abusar del cherry-pick para copiar muchos commits entre ramas, cuando lo correcto sería un merge o rebase; eso duplica commits (mismo cambio con hashes distintos en dos ramas) y ensucia el historial, pudiendo causar conflictos al mergear después. Cherry-pick es para casos puntuales, no para integrar ramas completas.
"
git cherry-picktoma un commit específico de otra rama y lo aplica sobre la rama actual como un commit nuevo, con hash distinto. Lo uso para traer un cambio puntual, como un fix crítico, sin tener que mergear toda la rama de donde viene, que quizá aún no está lista. Si hay conflicto, lo resuelvo, hagogit addygit cherry-pick --continue. Eso sí, no abuso de él para copiar muchos commits, porque duplica cambios y ensucia el historial; para integrar ramas completas uso merge o rebase."
En la rama feature (que aún no está lista) hay un commit que arregla un bug urgente en producción. ¿Cómo llevas solo ese fix a main sin mergear toda feature?
Ver respuesta
Con cherry-pick: te cambias a main (git switch main) y ejecutas git cherry-pick <hash-del-fix>. Eso aplica solo ese commit sobre main como un commit nuevo, sin arrastrar el resto de commits de feature, que todavía no está lista para integrarse.