Sinopsis
git cherry-pick [-n] [-x] [--continue] [--abort] <commit>...
Descripción
El comando git cherry-pick aplica los cambios de uno o más commits existentes a tu branch actual, creando nuevos commits con SHAs diferentes pero el mismo contenido. Es la herramienta correcta para portar bug fixes entre branches de release.
Si surge un conflicto, cherry-pick se pausa para que resuelvas, igual que merge. Pásale múltiples SHAs o un rango (A..B) para portar varios commits a la vez.
En el uso diario, este comando se integra estrechamente con alias de shell, plugins de editor e integración continua. Los usuarios avanzados a menudo añaden alias que combinan los flags que siempre pasan. El formato de salida puede personalizarse vía configuración de Git. Cuando algo sale mal, ejecuta el comando con GIT_TRACE=1 para revelar las llamadas plumbing subyacentes.
Entender cómo este comando interactúa con el resto del modelo de datos de Git rinde dividendos. Cada comando opera sobre algún subconjunto de las piezas (objetos, index, refs, árbol de trabajo), y saber cuáles toca ayuda a predecir resultados y a recuperarse de errores.
Opciones comunes
| Opción | Descripción |
|---|---|
-n, --no-commit | Apply changes but don't commit yet. |
-x | Annotate the commit message with the source SHA. |
-e, --edit | Edit the commit message before committing. |
--continue | Resume after resolving conflicts. |
--abort | Cancel and restore prior state. |
--skip | Skip current commit and continue. |
-m <parent> | Specify mainline when picking a merge commit. |
-S | GPG-sign the resulting commits. |
Ejemplos
git cherry-pick abc123
# Apply a single commit onto current branch
git cherry-pick -x abc123 def456
# Apply two commits with traceability annotations
git cherry-pick A..B
# Pick a range (exclusive of A, inclusive of B)
git cherry-pick --continue
# Continue after fixing conflicts
Errores comunes
Cherry-picking the same change repeatedly can confuse later merges, since identical-looking commits have different SHAs. Use git rerere to remember resolutions. Picking a merge without -m fails. For long sequences, prefer rebase or merge.
Comandos relacionados
git rebase, git revert, git merge, git rerere