DEV Community

Cover image for Git avanzado: ¿Qué es cherry pick? 🍒
Cristian Fernando
Cristian Fernando

Posted on

Git avanzado: ¿Qué es cherry pick? 🍒

Índice

  1. ¿Qué es cherry pick?
  2. Casos de uso
  3. Sintaxis
  4. Tu primer cherry pick: Pasos para hacer un cherry pick exitoso
  5. ¿Qué hacer en caso de conflictos?
  6. Referencias
  7. Conclusiones

1. ¿Qué es cherry pick?

Cherry pick es un comando que nos proporciona git que sirve para poder realizar copias de uno o varios commits individuales de una rama a otra.
¿Para qué nos puede ser útil esto?
La verdad es que hay casos muy concretos en los que esto puede ser útil por lo que cherry pick no es de los comandos más usados en git pero es interesante saber que se cuenta con un comando que nos puede ser útil en casos concretos de un proyecto.

Si bien git merge y git rebase nos sirve para poder fusionar ramas enteras, que sucede cuando necesito tomar un commit específico y "fusionarlo" con una rama en concreto. Aquí es donde podemos usar cherry pick.

img

El commit copiado cambió de HASH siempre, por ello siempre se recomienda usar cherry pick en entornos locales.

2. Casos de uso

  • Cherry pick es útil cuando por error hicimos un commit en una rama que no debía hacerse dicho commit, entonces cherry pick nos permite arreglar esto copiando el commit a la rama que le corresponde.

  • Podemos solucionar bugs con cherry pick y en lugar manipular la rama entera donde se encuentra el bug, mejor solo manipulamos el commit en concreto que está causando el problema.

3. Sintaxis

La sintaxis es muy sencilla:

git cherry-pick <HASH>
Enter fullscreen mode Exit fullscreen mode

Donde HASH es el identificador único del commit que queremos copiar.

4. Tu primer cherry pick: Pasos para hacer un cherry pick exitoso

Para ejemplificar todo lo ya dicho vamos a usar un repositorio que aún sigo escribiendo que se llama cris-python. Este repositorio contiene conceptos teóricos y prácticos para aprender Python.

Puedes ver el estado del repositorio:

GitHub logo crisdux / cris-python

Repo dedicado para aprender y practicar Python de 0 a 100

Aprende Python

Repositorio orientado al aprendisaje de python con teoria y ejercicios practicos. Get started by customizing your environment (defined in the .idx/dev.nix file) with the tools and IDE extensions you'll need for your project!

Learn more at https://developers.google.com/idx/guides/customize-idx-env

En este proyecto aprenderas:

  • Básicos de Python
  • Cadenas
  • Números
  • Condicionales, etc...



El repositorio tiene dos carpetas principales: fundamentos/ (donde estas todos los conceptos teóricos) y ejercicios/ (con todos los ejemplos prácticos)

Para cada nuevo tema a aprender sobre python creó una nueva carpeta y una nueva rama para ordenar todo el contenido, por ejemplo, para aprender listas, tenemos una sub carpeta listas tanto en fundamentos como en ejercicios.

En algunas ocasiones cometía un error haciendo un commit directo a la rama main en lugar de hacerlo a la rama pertinente, por ejemplo, a la rama-listas.

Acá es donde puede entrar a salvarnos cherry pick! 🍒

  • Primero identificamos el commit que queremos copiar, en este caso será un commit de nuestra rama main que queremos copiar en nuestra rama-funciones.

  • Luego nos movemos a la rama de destino, en este caso la rama-funciones.

  • Luego ejecutamos: git cherry-pick <HASH>, quedaría así:

imagen

Verificamos el resultado final y listo.

5. ¿Qué hacer en caso de conflictos?

En caso de conflictos tenemos tenemos 2 opciones:

  • Podemos abortar el comando haciendo git cherry-pick --abort lo que terminará el proceso.
  • Podemos resolver el conflicto y luego hacer git cherry-pick --continue para poder seguir el proceso.

6. Referencias

7. Conclusiones

  • Cherry pick es una manera sencilla de copiar commits entre ramas en un repositorio.
  • Es útil para casos de uso muy concretos pero que es muy importante conocer.
  • El HASH del commit copiado siempre cambiará, por lo que se recomienda usarlo en entornos locales.

Otros post de mi autoría que te pueden interesar:

img

Top comments (0)