Git
git cherry-pick

git cherry-pick comando: múltiples commits, conflicto, cancelar, opciones

Este artículo cubrirá el comando git cherry-pick. Cubriremos lo básico, cómo usarlo, cómo manejar múltiples commits, gestión de conflictos, orden, y las diferentes opciones.

1. ¿Qué es git cherry-pick?

Cherry picking en Git es el proceso de copiar uno o más commits deseados de una rama e insertarlos en otra rama. Es una característica muy potente, dependiendo de cómo la uses, pero también puede desordenar tu historial. Puedes hacer esto con el comando git cherry-pick.

En particular, el comando git cherry-pick se usa para cosas como correcciones urgentes de errores, o para sincronizar código parcial entre ramas. Por lo demás, es una buena práctica usar métodos relativamente seguros como git merge y git rebase, incluso en situaciones de colaboración. es un buen proceso.

Así que empecemos por entender el uso del comando git cherry-pick para poder usarlo inmediatamente cuando lo necesitemos.

2. Lo básico del uso de cherry-pick

Usar el comando git cherry-pick es bastante simple. Primero navega a la rama donde quieres añadir los commits, y luego introduce los IDs de los commits que quieres extraer de la otra rama, así

$ git cherry-pick [commit-id]

Las confirmaciones con los mismos cambios que esa confirmación se registrarán como nuevas confirmaciones en la rama actual.

Por ejemplo, supongamos que actualmente tiene el siguiente historial de confirmaciones

A - B - C - D  main
 \ E - F - G  feature-a

Supongamos que se encuentra un error en la rama main, y un desarrollador que trabaja en la rama feature-a hace un commit G en la rama feature-a que corrige el error.

En este punto, necesitas obtener el commit G en la rama main para restaurar rápidamente el servicio. Utiliza el comando git cherry-pick para añadir este commit, como se muestra a continuación.

$ git cherry-pick [commit-id-G]

Una vez hecho esto, el historial de confirmaciones tendrá el siguiente aspecto

A - B - C - D - H  main
 \ E - F - G  feature-a

Esto significa que todos los cambios del commit G han sido añadidos al nuevo commit llamado H.

3. Seleccionando múltiples confirmaciones

Hay dos formas de importar múltiples confirmaciones a la vez.

3.1. 3.1. Seleccionando

El primer método consiste en introducir los commits de uno en uno. Introduzca los IDs de commit deseados uno a uno de la siguiente manera.

$ git cherry-pick [commit-id-1] [commit-id-2] [commit-id-3]

Este es el mismo patrón que cuando añades múltiples archivos y carpetas usando el comando git add . En este caso, se añadirán como nuevos commits desde el principio.

3,2. Importar por ámbito

El segundo método consiste en especificar un rango de commits a importar. Puede utilizar ... o ..., y cherry-picking trata ambos por igual.

Puede usar algo como esto, en cuyo caso [older-commit-id] será excluido y copiado empezando por los commits posteriores.

$ git cherry-pick [older-commit-id]..[new-commit-id]

Si quieres extraer los commits F y G de la rama feature-a que vimos en la Sección 2, escribirías lo siguiente

$ git cherry-pick [commit-id-E]..[commit-id-G]

Si desea incluir también los commits [older-commit-id], también puede utilizar el símbolo ^..., lo que significa que el siguiente comando producirá el mismo resultado que el comando anterior.

$ git cherry-pick [commit-id-F]^..[commit-id-G]

4. Resolver o cancelar conflictos de cherry-pick

Cuando realizas un git cherry-pick estás confirmando nuevos cambios, lo que por supuesto introduce la posibilidad de conflictos. En este caso, deberías resolver manualmente los conflictos antes de continuar con el cherry-pick, igual que harías con un merge o rebase.

Este proceso sigue el mismo patrón que un rebase. Después de haber resuelto manualmente los conflictos, puede utilizar las dos opciones siguientes con el comando para completar o cancelar el cherry-picking.

Para finalizar, ejecute el comando

$ git cherry-pick --continue

Para abortar, utilice el siguiente comando

$ git cherry-pick --abort

5. Opciones de uso común

Los siguientes comandos se usan a menudo junto con el comando git cherry-pick. Familiarícese con ellos y utilícelos junto con el comando cuando sea necesario.

5.1. -n, --no-commit opciones para esperar sin confirmar

Por defecto, el comando git cherry-pick espera crear nuevos commits. A veces, sin embargo, quieres obtener un commit específico, pero confirmarlo después de añadir otro cambio. Para hacer esto, necesitarás el commit generado por cherry-pick y otro commit.

Las opciones -n' o --no-commit son útiles en este caso porque no confirman los cambios generados por el comando cherry-pick, sino que los dejan en un estado de preparación. Esto le permite añadir los cambios que desee sin confirmarlos por separado, y luego confirmarlos todos a la vez.

5.2. Opciones -e y --edit para cambiar el mensaje de confirmación

Normalmente el comando git cherry-pick genera automáticamente un mensaje de confirmación parecido a este

cherry-pick [commit-id] [commit-message-of-picked-commit]

Si desea abrir un editor para modificar este mensaje de confirmación o añadir más información, puede utilizar las opciones -e o --edit.

5.3. Opción --signoff para mostrar el autor de los commits importados

Si está trabajando en un proyecto de código abierto, o colaborando en un proyecto de código abierto, y está utilizando la función cherry-pick, a menudo tendrá una convención para mostrar el author de las confirmaciones importadas.

En este caso, la opción --signoff puede utilizarse para añadir automáticamente el author de la confirmación anterior al mensaje de confirmación, sin tener que escribirlo manualmente.

Por ejemplo, si su mensaje de confirmación anterior tenía este aspecto

Implement new feature ABC

El mensaje para los nuevos commits seleccionados con la opción --signoff se escribe automáticamente como se muestra a continuación.

Implement new feature ABC
Signed-off-by: Your Name [your.email@example.com]

5.4. Uso de la opción --strategy para especificar una estrategia de fusión

Debido al potencial de conflictos durante las fusiones, el comando cherry-pick también permite especificar manualmente una estrategia de fusión. Las estrategias de fusión más comunes, incluyendo la actual estrategia por defecto ort, se resumen en la última sección de git merge post.

Los comandos son

$ git cherry-pick --strategy [merge-strategy]

6. Conclusión

El comando git cherry-pick es un potente comando que debes tener a mano cuando estés trabajando en un proyecto y necesites colaborar estrechamente. Espero que lo hayas aprendido lo suficientemente bien como para usarlo cuando llegue el momento.

copyright for git cherry-pick

© 2023 All rights reserved.