Selección de commits específicos con git cherry-pick


Aprender git cherry-pick es una gran decisión si quieres tener un control más preciso sobre tu historial de commits

Selección de commits específicos con git cherry-pick
oscar Escrito por oscar 27 April 2025 96 0

Aprender git cherry-pick es una gran decisión si quieres tener un control más preciso sobre tu historial de commits.

🍒 ¿Qué es git cherry-pick?

git cherry-pick toma uno (o varios) commits de una rama y los aplica en la rama actual, sin hacer un merge completo. Es ideal para aplicar cambios específicos sin traer todo el historial de otra rama.

🔹 No traés todos los cambios de otra rama, solo el commit que elegís.
🔹 Es como "elegir una cereza" de un pastel: tomás solo lo que querés.

git cherry-pick
git cherry-pick

🧠 ¿Para qué sirve?

  • Traer un bug fix de otra rama sin traer todos los cambios.
  • Copiar una mejora específica hecha en otra rama.
  • Recuperar un commit perdido sin mover toda la historia.

🧪 Ejemplo práctico

Queremos aplicar el commit c5 que está en la rama feature-x a la rama main.

* c5 - Rama `feature-x` (commit que quieres copiar)
|
* c4
|
* c3 - Rama `main`
|
* c2
|
* c1

Paso 1: Crear un entorno de prueba

# Crear nuevo repositorio
mkdir cherry-pick-demo && cd cherry-pick-demo
git init

# Crear un archivo y hacer primer commit
echo "línea 1" > archivo.txt
git add archivo.txt
git commit -m "c1: primer commit"

# Segundo commit
echo "línea 2" >> archivo.txt
git commit -am "c2: segundo commit"

# Crear rama feature-x
git checkout -b feature-x

# Hacer un commit exclusivo en feature-x
echo "línea exclusiva de feature-x" >> archivo.txt
git commit -am "c5: cambio en feature-x"

# Ver historial
git log --oneline --graph --all

Paso 2: Volver a la rama main

git checkout main

Paso 3: Usar cherry-pick

git cherry-pick <HASH_DEL_COMMIT>

Reemplaza <HASH_DEL_COMMIT> por el hash de c5. Puedes obtenerlo con:

git log feature-x --oneline

Ejemplo:

git cherry-pick 3f9a8d2

Resultado

Ahora main tiene el commit c5 aplicado, sin haber hecho un merge con feature-x. El historial se verá así:

* c5' (copiado desde feature-x) ← ahora en main 
* c2 
* c1

🛠️ ¿Qué pasa si hay conflictos?

Si al aplicar el commit hay conflictos, Git te lo avisa:

error: could not apply 1a2b3c4 Fix en validación de formulario

Tendrías que:

  • Resolver los conflictos manualmente.
  • Después ejecutar:
git add . git cherry-pick --continue

Tambien se puede cancelar todo el cherry-pick:

git cherry-pick --abort

📚 Resumen de comandos útiles

Comando Qué hace
git cherry-pick <commit> Aplica un commit específico en tu rama actual
git cherry-pick --continue Continúa después de resolver conflictos
git cherry-pick --abort Cancela el cherry-pick y vuelve al estado previo

🚨 Atención

  • No cherry-pick commits enormes o complicados si no entendés todo lo que traen.
  • Cada cherry-pick crea un nuevo commit en tu rama (no cambia el commit original).

🔥 Resumiendo en una frase:

git cherry-pick es la forma de copiar solo los cambios de un commit específico a tu rama, sin traer todo el historial.


Comentario

Debe aceptar antes de enviar