¿Qué hace Git Cherry Pick y cuándo debería usarlo?

Contenidos

Logotipo de Git

git cherry-pick es una herramienta simple pero poderosa que le posibilita transferir confirmaciones selectivas de una rama a otra. Puede usarlo cuando no desee fusionar una rama completa en la maestra, pero aún así le gustaría incluir cambios de una rama de función.

¿Qué es Git Cherry Pick y cómo funciona?

En Git, las confirmaciones son las unidades que rastrean los cambios a lo largo del tiempo. Cada confirmación puede representar una corrección de errores, una nueva característica o parte de una solución más grande. Puede pensar en las confirmaciones almacenadas como una lista enlazada que apunta hacia atrás en el tiempo; cada vez que cambia el HEAD de su rama, Git reconstruye los archivos de su directorio local teniendo en cuenta todas las confirmaciones que se remontan al principio.

Esta es una simplificación, de todos modos, y Git no almacena técnicamente las confirmaciones como simples listas de cambios, utiliza blobs basados ​​en archivos, pero el principio es el mismo.

Las cosas se complican cuando las sucursales se involucran. A menudo, el trabajo en una función lleva varios días o semanas. En lugar de desordenar el repositorio principal, pasa a una rama de características separada, y después se revisa el código y se fusiona nuevamente. La fusión es simplemente ramificar este historial de confirmación para que toda la rama de características se incluya cuando Git hace lo suyo.

A pesar de esto, ¿qué sucede si desea fusionar algunas cosas, pero no desea que se incluya toda la rama aún? No puedes hacer git merge en ese caso.

Aquí es donde git cherry-pick se torna útil. Hace lo que su nombre indica: toma una única confirmación de la rama de características, la selecciona individualmente y la aplica a la rama maestra, o viceversa. Esto copia la confirmación, por lo que hay una nueva confirmación en la rama de destino.

Tenga en cuenta que no hay una «línea» real que conecte la nueva confirmación en la rama maestra con la confirmación anterior. La nueva confirmación seleccionada cuidadosamente creada en el maestro no hace referencia a la confirmación de origen en absoluto, la confirmación simplemente se copia. Git se encargará de ello cuando vuelva a fusionar las ramas, debido a que las confirmaciones se ven como copias entre sí.

En efecto, la confirmación se «transfiere» a la nueva rama, aún cuando deberá prestar atención que la confirmación anterior aún se aplica a la rama de características. A pesar de esto, no querrá revertir la confirmación de origen, puesto que eso causará problemas al fusionar más adelante.

¿Por qué Cherry Pick?

Hay algunos casos de uso para esto. Tal vez está trabajando en una función y no está lista para su lanzamiento, pero ha corregido un error en la rama de funciones que le gustaría incluir en su versión de lanzamiento semanal. Puede usar la selección selectiva para copiar la corrección de errores en Master para implementarla antes.

O tal vez tenga varias ramas para producción y desarrollo, y le gustaría copiar una corrección de error urgente de la producción al desarrollo. Cherry pick puede hacer eso además.

O es factible que inclusive accidentalmente se haya comprometido con la rama incorrecta. Puedes utilizar git cherry-pick para copiarlo a la derecha, y después git reset para deshacer esa confirmación (siempre que esté en la CABEZA de la rama).

Usando Git Cherry Pick

Una vez que entienda lo que está haciendo, git cherry-pick es bastante simple de utilizar.

La forma más fácil de ver el historial de confirmaciones de Git en la línea de comando es con el siguiente comando, que muestra todas las confirmaciones pero con un historial de bifurcaciones y fusiones, que es crucial para utilizar cherry-pick:

git log --pretty=format:"%h %s" --graph

Después, simplemente puede copiar el hash SHA1 de la confirmación y ejecutar la selección de cereza:

git cherry-pick 1da76d3

Tenga en cuenta que además puede elegir varias confirmaciones al mismo tiempo, simplemente pasar varios hashes.

git cherry-pick tiene algunas opciones útiles:

  • --no-commit solo aplica los cambios a su directorio. Necesitará preparar y confirmar manualmente.
  • --edit le permitirá cambiar el mensaje de confirmación.
  • -x agregará un mensaje que diga «cherry pick from commit: …»

Desde luego, si está usando un cliente Git basado en GUI como Tenedor o GitKraken, que sugerimos encarecidamente, puede hacer un clic con el botón derecho en el compromiso y seleccionar seleccionarlo:

Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.