Git cherry-pick es un comando en Git que selecciona y aplica commits específicos de una rama o branch a otra. Todo, sin tener que hacer un merge completo. Así, podemos copiar un commit específico y aplicarlo de forma aislada en la rama de destino, conservando su historial.
Escenarios de uso de Git Cherry Pick
Este comando facilita la incorporación precisa de cambios, optimizando la colaboración y el mantenimiento en proyectos de desarrollo de software. Veamos sus casos de uso.
1. Colaboración en equipo
Antes que nada, puede ser útil implementarlo cuando diferentes miembros del equipo trabajan en áreas similares del código, pues permite seleccionar y aplicar commits específicos a cada rama, facilitando el progreso individual.
2. Solución de bugs o errores
Cuando encuentras un error o bug, es importante solucionarlo y entregar la corrección a los usuarios lo más rápido posible. Con Git Cherry Pick, puedes aplicar rápidamente un commit de verificación en la rama principal, evitando que afecte a más usuarios.
3. Deshacer cambios y recuperar commits perdidos
A veces, una rama de funcionalidad puede ser obstoleta y no ser fusionada con la rama principal. O puede suceder que una solicitud de extracción (pull request) sea cerrada sin ser fusionada.
Git nunca pierde esos commits y, a través de comandos como git log y git reflog, puedes encontrar y aplicar los commits utilizando Git Cherry Pick.
¿Cómo funciona Git Cherry Pick? Ejemplos
Imaginemos que tienes un repositorio con el siguiente estado de las ramas:
a - b - c - d Rama Principal
\\
e - f - g Rama de Características
El uso de Git Cherry Pick es bastante sencillo y se ejecuta de la siguiente manera:
Primero, asegúrate de estar en la rama principal empleando el comando git checkout rama-principal.
Luego, ejecuta el siguiente comando:
git cherry-pick commitSha
Aquí, commitSha es una referencia al commit que deseas aplicar. Puedes encontrar la referencia del commit utilizando el comando git log. Supongamos que deseas usar el commit ‘f’ en la rama principal.
Una vez ejecutado el comando, el historial de Git se verá así:
a - b - c - d - f Rama Principal
\\
e - f - g Rama de Características
De esta forma, el commit ‘f’ se ha incorporado correctamente a la rama principal.
El uso de Git Cherry Pick debería aplicarse con sabiduría, ya que puede generar duplicación de commits y complicaciones en el historial de cambios. Sin embargo, si sabes lo que estás haciendo, ¡adelante! Solo asegúrate de evitar su utilización si no estás seguro.
¿Cómo deshacer este comando en caso de conflicto?
Supongamos que estás usando GitHub para colaborar con un equipo en un proyecto y has realizado un cherry-pick de un commit de otra rama en tu rama local, pero ocurren conflictos durante este proceso y deseas detenerlo y volver al estado anterior.
Por suerte, en ese caso, puedes emplear el siguiente comando.
git cherry-pick --abort
Esto significa que puedes hacer las correcciones necesarias en tu rama local y volver a intentar el cherry-pick si así lo deseas.
Pon en práctica lo aprendido
Git Cherry Pick es un comando poderoso y conveniente que resulta especialmente útil en ciertas situaciones. Sin embargo, si abusas de él, podría considerarse una mala práctica en Github. Recuerda utilizarlo correctamente y comprender sus implicaciones en el historial de cambios.
Si necesitas aplicar commits específicos, no te preocupes. Siempre puedes usar el comando git log y Git Cherry Pick.
Este comando permite coger uno o varios commits de otra rama sin tener que hacer un merge completo. Así, gracias a cherry-pick, podríamos aplicar los commits relacionados con nuestra funcionalidad de Facebook en nuestra rama master sin necesidad de hacer un merge.
Para demostrar cómo utilizar git cherry-pick, supongamos que tenemos un repositorio con el siguiente estado de rama:
a - b - c - d Master \
e - f - g Feature
El uso de git cherry-pick es sencillo y se puede ejecutar de la siguiente manera:
git checkout master
En este ejemplo, commitSha es una referencia de confirmación. Puedes encontrar una referencia de confirmación utilizando el comando git log. En este caso, imaginemos que queremos utilizar la confirmación 'f' en la rama master. Para ello, primero debemos asegurarnos de que estamos trabajando con esa rama master.
git cherry-pick f
Una vez ejecutado, el historial de Git se verá así:
a - b - c - d - f Master \
e - f - g Feature
La confirmación f se ha sido introducido con éxito en la rama de funcionalidad
tome su like buen hombre!!
Me gustan tus aportes =) Gracias
Gracias por el aporte... 👍🏻👍🏻👍🏻
==Apuntes !! ✌==
Gracias por los apuntes!!
Los mejores apuntes
LES ENSEÑAMOS GIT REBASE Y GIT CHERRY-PICK, PERO NO DEBERÍAN DE USARLOS PORQUE SON MALA PRÁCTICA
jaja claro, estaba alegre por entender como funcionan y después me dicen que son malas practicas jajaja
Igual es perfecto saberlo porque ocasionalmente se ve el uso de estos comandos en los equipos
Paré el video para hacer una prueba rápida en mi proyecto y estuve sufriendo por el conflicto que me dio. Justo terminé de arreglar todo, le doy play nuevamente al video y ¡PUM!, Freddy habla del conflicto, jaja.
Jajajaja me ha pasado a mi también.
Si igualmente tuve ese conflicto.
Freddy: usar git rebase y git cherry-pick son malas prácticas
El pibe en las oficinas de git que los programó:
jjajajaja es cierto, no nos ponemos a pensar en los desarrolladores que crear todas esas herramientas y al final la comunidad las etiqueta de mala practica
jajajajajajjajajaj
Saber que es una herramienta para solucionar algun problema ocurrente, no debe ser considerada en la planeación ni en la estrategia, es solo ocacional.
Sabias palabras :D
Nunca nada se borra en Git.
¿Qué hacer sin en un comentario de un archivo de programación insulto a mi jefe?
¿Hay alguna forma de eliminar ese commit?
ñaca ñaca
Simple, andá juntando las pertenencias de tu oficina
jaja nos ofreciste la manzana, para decirnos al final que estaba mal comerla 😂😂😂
Bien dicho ...
Si...
Resumen de la clase:
Crear una nueva rama y pasarse para esa rama.
Realizar los cambios en el código y realizar todos los commits necesarios.
Antes de ejecutar el comando git cherry-pick, se debe anotar el id del commit que queremos traer al master.
Para ello vamos a la rama donde esta el commit requerido (git checkout nombre_rama), ejecutamos el comando git log --oneline,
copiamos el id del commit y nos regresamos a la rama master (git
checkout master).
En la rama master, ejecutamos: git cherry-pick id_commit.
Git agregará al master el código requerido del commit indicado.
Después, de ser necesario, se ejecutan los comandos git pull
origin master y git push origin master para subir los cambios al
repositorio de github en la nube.
Si se necesitan traer todos los cambios de la rama de donde tomé el commit, se ejecuta desde master, git merge nombre_rama.
De haber conflictos al hacer merge, se resuelven dejando las líneas de código necesarias o utilizando las opciones de Vscode.
Gracias
Muy buen resumen :)
Cherry-pick es un poder demasiado grande pero de mala practica, hay que usarlo con demasiada responsabilidad, y aun así es una MALA PRACTICA.
Gracias por la aclaración!!!
No lo usare, gracias por el dato.
Antes del git cherry-pick:
Después de ejecutar git cherry-pick commitF desde la rama master:
Buen ejemplo.
👍 Buen Ejemplo
cherry-pick literalmente se traduce del ingles como agarrar cerezas, entonces lo que esta haciendo uno es agarrar esas cerecitas que son los commits de las ramas de mi proyecto
Cherry-pick es una expresion que indica que estas eligiendo algo en especifico, como las cerezas son pequeñas la expresion da la idea de precision al elegir
Aporte...
Si te equivocas y haces el git cherry-pick en el mismo branch que lo estas sacando te sale un error de versiones, puedes deshacer el cherry-pick con git cherry-pick --abort
Buen aporte!
Gracias! Muy buen resumen!
Se agradece el resumen :)
Cherry-pick es el copia y pega de commits en otras ramas, alert-spoiler al momento de hacer un merge de la rama donde copiaste ese commit con la rama donde la pegaste, se duplicara ese cambio y tendrás que eliminar uno de ellos.
Gracias, por el dato.
buen aporte compañero.
Apuntes 😊
Buenos apuntes👌
Buen aporte
Deberías usar cherry-pick cuando...
Esta pregunta la falle ya dos veces y por mas que veo el video... no logro entenderla, ¿Me pueden ayudar y explicar?
Hola; el comando cherry-pick se utiliza para "copiar" o traer un commit anterior de la misma rama o de otra rama a otra. Siguiendo el ejemplo del vídeo, se está modificando el archivo Readme en una rama independiente a master, en esta rama se hacen 3 commits, cada commit con una línea de texto diferente. Recuerda que en la rama master, el archivo Readme no ha sido modificado. Ahora, en el ejemplo, por urgencia o lo que sea, se requiere que la primera línea de texto que se agregó al archivo Readme en la rama independiente aparezca en el archivo Readme en la rama Master, sólo la primera línea de texto, no las tres líneas que ya se agregaron. Para lograr esto, ejecutas el comando cherry-pick desde la rama master, especificando el identificador del commit en cuestión, y de esta forma te traes sólo esa línea de texto que se agrego en la rama independiente a la rama master.
En resumen este comando se utiliza para "pegar" commits independientes en otra rama o en la msima rama, pero al hacerlo este commit se convierte en el HEAD, es decir, como si fuera el último cambio que hiciste; como lo dice en la clase... reescribes la historia del proyecto.
Espero que esta información te sea de utilidad. Un saludo!
Queridos compañeros, encontré una manera para que sigan practicando de forma didáctica git sin miedo a romper nada, esta super bueno para poner en practica todo lo aprendido en el curso Profesional de Git y GitHub, espero les sirva Saludos Practica Git sin romper nada