Saltar al contenido principal

Git Cherry-Pick: Cómo seleccionar y aplicar commits específicos

¡Aprende a utilizar git cherry-pick con ejemplos paso a paso, buenas prácticas y consejos para solucionar problemas!
Actualizado 6 mar 2025  · 15 min de lectura

Trabajar con ramas en entornos colaborativos de desarrollo de software es esencial para aislar características, correcciones de errores o experimentos. Sin embargo, hay veces que necesitas tomar cambios concretos de una rama y aplicarlos a otra sin fusionar toda la rama. Aquí es donde git cherry-pick adquiere un valor incalculable. 

El objetivo de este tutorial es proporcionar una guía completa sobre cómo utilizar git cherry-pick eficazmente. Aprenderás la sintaxis del comando, comprenderás cómo manejar los conflictos y explorarás las mejores prácticas y los errores más comunes que debes evitar. ¡Vamos a ello!

¿Qué es Git Cherry-Pick?

El comando git cherry-pick es un comando fundamental de Git que proporciona a los desarrolladores un control granular sobre su código fuente. 

merge A diferencia de otras operaciones de Git, comoo rebase, que trabajan con ramas enteras, cherry-pick te permite tomar confirmaciones concretas de una rama y aplicarlas a otra. Esto aporta precisión, sobre todo en situaciones en las que sólo necesitas integrar cambios concretos y no todas las modificaciones de una rama.

El comando git cherry-pick funciona copiando el contenido de los commits seleccionados y creando otros nuevos en la rama de destino, manteniendo la integridad del historial de commits.

Cuándo usar git cherry-pick

Los casos de uso de git cherry-pick incluyen: 

  • Corrección de errores de retroceso: Has resuelto un error en tu rama de desarrollo y necesitas la misma corrección en una rama estable o de lanzamiento. Cherry-picking te permite trasladar la corrección del error sin traer cambios no relacionados.
  • Aplicando hotfixes: Cuando la producción requiere una corrección crítica mientras las ramas de desarrollo siguen evolucionando, el cherry-picking te permite extraer y aplicar la corrección a la rama de producción.
  • Aislamiento de funciones para pruebas: Puede que durante las pruebas sólo sea necesario comprobar commits específicos relacionados con una característica. En lugar de fusionar toda la rama de características, seleccionar los commits necesarios mantiene la rama de pruebas limpia y eficiente.
  • Corregir commits mal colocados: Si una confirmación se ha enviado por error a la rama equivocada, puedes enviarla a la rama adecuada sin alterar el historial del proyecto.
  • Reutilizar los cambios en varias ramas: En los casos en que necesites la misma actualización en varias ramas, el cherry-picking te permite replicar los cambios en distintas ramas sin rehacer el trabajo ni introducir complejidad en las ramas.

Aprende hoy los fundamentos de Git

Para principiantes: Control de versiones maestro mediante Git.
Empieza a aprender gratis

Sintaxis de Git Cherry-Pick

Comprender la sintaxis de git cherry-pick es clave para utilizar eficazmente este comando. No se trata sólo de seleccionar commits, sino de aplicarlos con precisión para conseguir el resultado deseado.

La sintaxis básica para seleccionar una única confirmación es:

git cherry-pick <commit-hash>
  • git cherry-pick: La orden que inicia la operación.
  • : El identificador único (hash SHA-1) del commit que quieres seleccionar. Este hash se puede encontrar ejecutando git log para listar el historial de confirmaciones.

Al ejecutar el comando anterior, Git aplica los cambios de la confirmación especificada a la rama actual, creando una nueva confirmación con los mismos cambios pero con un hash diferente. 

Es importante tener en cuenta que el comando sólo transfiere la confirmación en sí, no el contexto ni el historial principal de la rama original.

¿Eres nuevo en Git y GitHub? Iníciate en el control de versiones en este tutorial de GitHub y Git fácil de usar de beginner.

Cómo utilizar Git Cherry-Pick: Ejemplos paso a paso

Ahora que entiendes la sintaxis básica de git cherry-pick, es hora de ver el comando en acción.

Esta sección proporciona ejemplos prácticos que te guiarán a través de situaciones básicas y más complejas en las que resulta útil la selección selectiva. Cada ejemplo ilustra cómo aplicar los cambios de una o varias confirmaciones a otra rama. 

Ejemplo 1: Seleccionar un único commit

Supongamos que has hecho una corrección en una rama de características que quieres aplicar a la rama principal sin fusionar toda la rama de características.

  • Primero, busca el hash del commit que quieres seleccionar ejecutando
git log
  • Localiza el hash de la confirmación. 
  • Cambia a la rama principal:
git checkout main
  • Ejecuta el comando cherry-pick (asume que el hash es abc1234):
git cherry-pick abc1234

Cuando ejecutes este comando, Git aplicará los cambios de la confirmación identificada por abc1234 a tu rama actual (que en este caso es main ). Git crea una nueva confirmación en la rama principal que contiene los mismos cambios que la confirmación original, pero con un nuevo hash de confirmación.

Ejemplo 2: Selección de múltiples commits

En algunas situaciones, puede que necesites aplicar varias confirmaciones distintas de una rama a otra. Supongamos que tienes tres confirmaciones distintas en tu rama de características que necesitas incorporar a la rama principal.

  • Busca los hashes de commit de cada commit que quieras seleccionar utilizando git log:
git log
  • Cambia a la rama principal:
git checkout main
  • Ejecuta el comando cherry-pick, listando los commits:
git cherry-pick abc1234 def5678 ghi7890

Ejemplo 3: Selección de un rango de commits

Supongamos que has hecho una serie de confirmaciones en la rama de características y quieres aplicarlas a la rama principal de una sola vez, sin especificar cada confirmación individualmente. ¿Cómo lo harías?

  • Utiliza git log para identificar los commits inicial y final que quieres seleccionar (por ejemplo, abc1234 a ghi7890).
  • Cambia a la rama principal:
git checkout main
  • Ejecuta el comando cherry-pick con un rango de confirmaciones:
git cherry-pick abc1234...ghi7890

Ejemplo 4: Seleccionar un commit de una rama remota

A veces, existe una corrección crítica en una rama remota, y quieres aplicarla a tu rama local sin fusionar toda la rama. He aquí cómo hacerlo:

  • Obtener los últimos cambios del repositorio remoto
git fetch origin
  • Lista los commits de la rama remota para encontrar el hash que necesitas:
git log origin/feature_branch --oneline
  • Supongamos que el hash de confirmación que necesitas es abc1234.
  • Cambia a la oficina principal de tu localidad:
git checkout main
  • Recoge el commit de la rama remota:
git cherry-pick abc1234

Esto te permite aplicar una confirmación de una rama remota sin fusionar toda la rama.

¿Necesitas comprobar una sucursal remota? Sigue esta guía paso a pasop sobre el checkout de Git para ramas remotas.

Ejemplo 5: Seleccionar un commit y modificarlo

Si seleccionas una confirmación pero necesitas hacer ligeras modificaciones antes de confirmarla, puedes utilizar el modo interactivo de Git. He aquí cómo:

  • Cambia a la rama de destino:
git checkout main
  • Selecciona la confirmación, pero detente antes de confirmarla:
git cherry-pick -n abc1234

La bandera -n (o --no-commit) aplica los cambios pero no crea una confirmación.

  • Modifica los archivos según sea necesario.
  • Etapa y confirma los cambios manualmente:
git add .
git commit -m "Modified cherry-picked commit from feature_branch"

Esto es útil cuando necesitas retocar un commit seleccionado antes de finalizarlo.

Manejar conflictos durante Git Cherry-Pick

Los conflictos son inevitables al seleccionar commits entre ramas, especialmente cuando el código base ha divergido significativamente. 

Aunque cherry-pick está diseñado para aplicar los cambios limpiamente, no siempre puede conciliar las diferencias automáticamente. En estos casos, los conflictos deben resolverse manualmente. Comprender cómo surgen los conflictos y cómo manejarlos es crucial para completar una operación en cherry-pick.

Cómo se producen los conflictos

Los conflictos suelen producirse cuando los cambios de la confirmación "cherry-picked" se solapan con los cambios ya presentes en la rama de destino o los contradicen. Por ejemplo:

  • La misma línea modificada en ambas ramas: Si se modifica la misma línea de código tanto en la rama de origen como en la de destino, Git no sabrá qué versión aplicar.
  • Fichero borrado en una rama pero modificado en otra: Si un archivo se elimina en una rama pero se modifica en la confirmación "cherry-picked", Git no sabrá si conservarlo o aplicar los cambios.
  • Cambios no relacionados pero el mismo archivo: Aunque los cambios no parezcan estar relacionados, si se producen dentro del mismo archivo, Git puede marcarlo como un conflicto potencial.

Cuando se produce un conflicto, Git detendrá la operación cherry-pick, dejando tu directorio de trabajo en un estado conflictivo que debe resolverse antes de continuar.

Resolución de conflictos

Cuando surja un conflicto, Git proporcionará indicadores de los archivos en conflicto, y tendrás que resolver manualmente las discrepancias. He aquí cómo resolver los conflictos:

1. Comprueba los archivos conflictivos: Ejecuta el siguiente comando para ver qué archivos están en conflicto:

git status

El comando mostrará la lista de archivos con conflictos. 

2. Resuelve los conflictos: Puedes editar manualmente los archivos conflictivos para resolver los problemas. Elimina los marcadores de conflicto (<<<<<<<, =======, >>>>>>>) y determina qué cambios conservar o cómo combinarlos.

3. Utiliza Git Mergetool (opcional): Si resolver los conflictos manualmente te resulta engorroso, puedes utilizar una herramienta de fusión que te ayude a visualizar y resolver los conflictos:

git mergetool

Dependiendo de tu configuración, la herramienta anterior abrirá una herramienta de fusión visual, que facilita la revisión y resolución de conflictos.

4. Marca los conflictos como resueltos: Una vez resueltos los conflictos, marca los archivos como resueltos utilizando:

git add <conflicted-file>

5. Completa la recolección de cerezas: Una vez resueltos todos los conflictos y organizados los archivos, finaliza el cherry-pick ejecutando:

git cherry-pick --continue

Muchos IDE y herramientas modernos, como Visual Studio Code y GitHub, ofrecen funciones integradas de resolución de conflictos de fusión. La interfaz web de GitHub te permite resolver conflictos directamente en los pull requests, lo que facilita la colaboración en repositorios compartidos sin cambiar a un entorno local.

Omitir una confirmación tras un conflicto

A veces, resolver un conflicto puede ser demasiado complejo, o puedes darte cuenta de que el compromiso no es necesario después de todo. En estos casos, puedes saltarte la confirmación por completo.

1. Aborta el proceso de selección actual: Si el conflicto es demasiado complicado y no quieres aplicar el commit, puedes omitirlo ejecutando:

git cherry-pick --skip

Esto abandonará la confirmación conflictiva y pasará a la siguiente (si estás seleccionando varias confirmaciones).

2. Aborta todo el cherry-pick: Si quieres abortar por completo la operación cherry-pick, puedes ejecutar:

git cherry-pick --abort

Este comando restaurará tu directorio de trabajo al estado en el que estaba antes de iniciar el cherry-pick. 

¿Quieres limpiar tu historial de confirmaciones? Aprende a combinar varios commits en uno solo con este tutorial de Git squash.

Buenas prácticas para utilizar Git Cherry-Pick

Un mal uso de cherry-pick puede dar lugar a historias complicadas y confusión en el control de versiones de tu proyecto. Para evitar estos escollos, seguir las mejores prácticas te garantiza que utilizas cherry-pick de forma eficaz sin introducir una complejidad innecesaria en tu código base.

Hazlo pequeño y específico

La selección selectiva es más eficaz cuando se utiliza para confirmaciones pequeñas y específicas que abordan tareas bien definidas, como correcciones de errores o mejoras de características menores. 

Evita seleccionar commits grandes y complejos que agrupen varios cambios, ya que pueden introducir conflictos y dificultar la gestión del código base. Cuanto más específico sea el compromiso, más fácil será aplicarlo sin efectos secundarios no deseados.

Documenta tus selecciones

Para mantener una historia clara, proporciona siempre el contexto adecuado cuando selecciones. Esto puede hacerse mediante mensajes de confirmación detallados o anotaciones en la documentación. 

Lo esencial es que expliques por qué era necesaria una selección. Esto es especialmente importante cuando se hace "cherry-picking" en ramas longevas o entornos colaborativos, ya que ayuda a los futuros colaboradores a entender por qué se aplicaron los cambios de forma selectiva.

Revisar el historial de confirmaciones

Antes de hacer cherry-picking, revisa el historial de confirmaciones tanto de la rama de origen como de la de destino. Este paso ayuda a identificar si la confirmación que vas a seleccionar depende de otros cambios. La omisión de dependencias puede dar lugar a una funcionalidad incompleta o a errores, así que asegúrate de que el cherry-pick no introduce funciones o actualizaciones a medias.

Evitar el uso excesivo del cherry-picking

Aunque el cherry-picking es conveniente para aplicar cambios específicos, su uso excesivo puede llevar a un historial fragmentado con commits duplicados entre ramas. Esto puede dificultar el rastreo del origen de ciertos cambios o la comprensión del contexto de desarrollo más amplio. 

Evalúa siempre si fusionar o volver a basar es una estrategia más adecuada antes de seleccionar. Utiliza cherry-pick con moderación y a propósito para evitar saturar el historial de confirmaciones.

¿Tienes problemas con los archivos innecesarios en Git? Aprende a utilizar .gitignore eficazmente con este tutorial de ignorar Git.

Solución de problemas comunes con Git Cherry-Pick

La resolución de los problemas que surgen al utilizar cherry-pick requiere una comprensión clara de los mecanismos subyacentes de Git. En esta sección, trataré algunos problemas comunes que puedes encontrar al hacer cherry-picking y cómo resolverlos.

Seleccionar un commit que no existe

A veces, puedes intentar seleccionar una confirmación que no es accesible desde la rama actual o que ya se ha fusionado. Esto suele dar lugar a un mensaje de error que indica que no se ha podido encontrar o aplicar la confirmación.

1. Compromiso no encontrado: Esto ocurre cuando el hash de la confirmación que intentas seleccionar no existe en el repositorio actual o en el contexto de la rama. Asegúrate de que estás haciendo referencia a la confirmación correcta comprobando el historial de confirmaciones con git log en la rama donde existe la confirmación. Solución:

  • Comprueba dos veces el hash de confirmación para asegurarte de que es correcto.
  • Comprueba que la confirmación existe en una rama a la que tienes acceso.
  • Si la confirmación está en una rama remota, asegúrate de que la rama se ha obtenido con git fetch.

2. Compromiso ya aplicado: Si la confirmación ya se ha fusionado o incorporado a la rama de destino, Git evitará que la dupliques. Esta salvaguarda mantiene limpio el historial y evita cambios redundantes. Solución:

  • Utiliza git log para comprobar si la confirmación ya está en la rama de destino.
  • Si es necesario, omite la operación cherry-pick puesto que los cambios ya se han aplicado.

Cherry-picking tras un rebase o una fusión

La selección después de un rebase o una fusión puede introducir complejidades debido a la alteración del historial de tus ramas. Rebasar reescribe los historiales de commits, mientras que fusionar combina ramas, y ambas cosas pueden afectar a la aplicabilidad de un cherry-pick.

1. Conflictos debidos a confirmaciones rebasadas: Tras un cambio de base, se reescribe el historial de confirmaciones, lo que puede causar problemas si intentas seleccionar confirmaciones que han sido modificadas durante el proceso de cambio de base. Puedes encontrarte con conflictos cuando el cherry-pick intente aplicar cambios que no coincidan con el historial reescrito. Solución:

  • Revisa cuidadosamente el historial de confirmaciones después de un rebase utilizando git log para asegurarte de que la confirmación que estás seleccionando no ha sido ya modificada.
  • Resuelve los conflictos como lo harías en un proceso estándar de cherry-pick, utilizando git status y ediciones manuales.

2. Duplicar confirmaciones después de una fusión: Fusionar ramas puede llevar a una situación en la que una confirmación que quieres seleccionar ya se ha incluido en el historial fusionado. Volver a seleccionarla puede dar lugar a confirmaciones duplicadas, que pueden desordenar tu historial y dificultar el seguimiento de los cambios. Solución:

  • Antes de hacer cherry-picking, inspecciona el historial de confirmaciones en ambas ramas para confirmar si la confirmación ya se ha fusionado.
  • Evita seleccionar el mismo commit si ya está en la rama de destino.

¿Necesitas deshacer cambios en Git? Aprende cuándo usar git reset frente a git revert en el tutoriales Git reset y revert.

Conclusión

git cherry-pick es una forma eficaz de aplicar confirmaciones específicas de una rama a otra sin fusionar toda la rama. Tanto si estás moviendo una corrección de errores, una actualización de características o simplemente aplicando cambios de forma selectiva, te ayuda a mantener tu historial Git limpio y centrado.

En esta guía, he explicado cómo seleccionar commits individuales y múltiples, resolver conflictos y seguir las mejores prácticas para evitar errores comunes. Si utilizas cherry-pick sabiamente, puedes mejorar tu flujo de trabajo a la vez que mantienes organizado tu repositorio.

Si quieres profundizar en tus conocimientos de Git, consulta Fundamentos de Git para tener un buen punto de partida. También puedes explorar Introducción a los Conceptos de GitHub o adoptar un enfoque estructurado con la pista de habilidades Fundamentos de GitHub.

Ahora que ya sabes cómo hacer cherry-pick como un profesional, ¡anímate y pruébalo en tu próximo proyecto!

Aprende hoy los fundamentos de Git

Para principiantes: Control de versiones maestro mediante Git.

Preguntas frecuentes

¿Qué ocurre si selecciono dos veces el mismo commit?

Si intentas seleccionar una confirmación que ya se ha aplicado a la rama de destino, Git puede crear una confirmación duplicada con un nuevo hash. Para comprobar si ya se ha aplicado una confirmación, utiliza

git log --oneline

Alternativamente, si no estás seguro, utiliza:

git cherry-pick -n 

Esto aplica los cambios sin confirmarlos, permitiéndote revisarlos antes de finalizar.

¿Puedo seleccionar commits de una rama eliminada?

Sí. Aunque se haya eliminado la rama, los commits pueden seguir existiendo en el historial de Git.

Utiliza git reflog para encontrar el hash de la confirmación y, a continuación, selecciónalo como de costumbre.

Sin embargo, si Git ya ha recogido basura de la rama, los commits pueden perderse.

¿Cómo puedo seleccionar una confirmación de un repositorio diferente?

Para hacer cherry-pick de otro repositorio, primero añádelo como remoto:

git remote add other-repo 
git fetch other-repo

A continuación, identifica el commit y selecciónalo:

git cherry-pick 

¿Puedo seleccionar un commit que incluya eliminaciones de archivos?

Sí, el cherry-picking conserva todos los cambios de la confirmación, incluidas las eliminaciones de archivos. Si una confirmación elimina un archivo, al hacer cherry-picking se eliminará el archivo en la rama de destino.

¿Cómo deshago un cherry-pick?

Si has seleccionado un commit por error y aún no lo has enviado, puedes deshacerlo utilizando:

git reset --hard HEAD~1

Si ya has pulsado el botón "Recoger cerezas", úsalo:

git revert 

Esto crea una nueva confirmación que deshace los cambios seleccionados.

¿Cuál es la diferencia entre git cherry-pick y git apply?

  • git cherry-pick copia una confirmación concreta y la aplica a la rama de destino, manteniendo los metadatos de la confirmación.
  • git apply se utiliza para aplicar archivos de parche (creados con git diff) pero no crea una nueva confirmación ni conserva el historial de confirmaciones.

¿Cómo puedo seleccionar un commit conservando el autor original?

Por defecto, git cherry-pick te establece como autor. Para mantener el autor de la confirmación original, utiliza

git cherry-pick -x 

Esto añade una referencia a la confirmación original en el nuevo mensaje de confirmación.

¿Puedo seleccionar varios commits no secuenciales?

Sí. En lugar de especificar un rango, enumera los hashes de confirmación individuales:

git cherry-pick   

Esto es útil cuando sólo necesitas seleccionar commits de una rama.

¿Cómo evito los conflictos cuando hago cherry-picking entre ramas?

Antes de hacer cherry-picking, asegúrate de que tu rama está actualizada:

git pull origin main

Además, revisa el historial de confirmaciones para confirmar que los cambios no dependen de otras confirmaciones que faltan. Si se producen conflictos, resuélvelos manualmente y continúa:

git cherry-pick --continue

¿Cuándo debo evitar usar git cherry-pick?

El uso excesivo de git cherry-pick puede llevar a un historial de confirmaciones desordenado, con confirmaciones duplicadas entre ramas. Es mejor evitarlo cuando

  • Los cambios implican varias confirmaciones dependientes: merge o rebase podrían ser una mejor opción.
  • Tienes que sincronizar regularmente las ramas -basar o fusionar mantiene el historial más limpio.
  • El commit incluye refactorizaciones importantes, ya que el cherry-picking sólo mueve cambios específicos, no el contexto más amplio de la rama.

Kurtis Pykes 's photo
Author
Kurtis Pykes
LinkedIn
Temas

Aprende más sobre Git con estos cursos

curso

Introduction to Git

2 hr
15.5K
Discover the fundamentals of Git for version control in your software and data projects.
Ver detallesRight Arrow
Comienza el curso
Ver másRight Arrow
Relacionado

tutorial

Tutorial de GIT Push y Pull

Aprende a realizar solicitudes de Git PUSH y PULL con GitHub Desktop y la línea de comandos.

Olivia Smith

13 min

tutorial

Tutorial de GitHub y Git para principiantes

Un tutorial para principiantes que muestra cómo funciona el control de versiones Git y por qué es crucial para los proyectos de ciencia de datos.
Abid Ali Awan's photo

Abid Ali Awan

17 min

tutorial

Tutorial de Git Revert y Git Reset para principiantes

Una guía tutorial para principiantes que muestra cómo utilizar los comandos Git Revert y Reset.
Zoumana Keita 's photo

Zoumana Keita

10 min

tutorial

Git rename branch: Cómo cambiar el nombre de una rama local o remota

Aprende a renombrar ramas Git locales y remotas utilizando el terminal o la interfaz gráfica de usuario (GUI) de clientes populares como GitHub.
François Aubry's photo

François Aubry

tutorial

Git Prune: Qué es la poda Git y cómo usarla

La poda Git es un comando Git que elimina del repositorio los objetos que ya no son accesibles desde ninguna confirmación o rama, ayudando a liberar espacio en disco.
François Aubry's photo

François Aubry

5 min

tutorial

Git pull force: Cómo sobrescribir una rama local con una remota

Aprende por qué git pull --force no es la mejor forma de sobrescribir una rama local con la versión remota, y descubre el método adecuado utilizando git fetch y git reset.
François Aubry's photo

François Aubry

Ver másVer más