Para hacer cherry-pick de commits dependientes en macOS, primero identifica el commit prerrequisito y aplícalo antes del commit que depende de él. En Terminal, inspecciona el historial de la rama de origen, confirma que la rama de destino tenga un árbol de trabajo limpio y luego haz cherry-pick de los IDs de commit seleccionados en orden de dependencia. Git aplica el cambio de cada commit y crea un nuevo commit en la rama en la que te encuentras actualmente; no determina automáticamente qué cambios necesita tu destino. Documentación de cherry-pick de Git
¿Qué orden deben seguir los commits dependientes?
Aplica un prerrequisito antes de su cambio dependiente. Por ejemplo, si el commit a1b2c3 añade una función y el commit d4e5f6 llama a esa función, selecciona primero a1b2c3 y d4e5f6 en segundo lugar. Si el segundo commit espera un archivo, interfaz o comportamiento introducido por el primero, invertirlos puede provocar conflictos o dejar el destino en un estado intermedio roto.
Usa el orden de padre a hijo de la rama de origen como punto de partida. Las directrices de flujo de trabajo de Git recomiendan dividir el trabajo en commits lógicos que sean coherentes y puedan funcionar de forma independiente; los historiales reales pueden no ajustarse a ese ideal, así que inspecciona qué cambia y de qué depende cada commit seleccionado. El cherry-picking copia los cambios de los commits de forma individual, mientras que la fusión (merge) incorpora cambios a nivel de rama. Si necesitas la rama completa y su historial, considera si una fusión se adapta mejor que seleccionar commits uno a uno. Documentación sobre flujos de trabajo de Git
Inspeccionar el historial en Terminal
Abre Terminal en tu Mac, ve a la carpeta del repositorio y comprueba tu estado actual. Sustituye la ruta entre comillas por la ruta real de tu repositorio; las comillas permiten espacios en los nombres de carpeta.
cd "/path/to/your/repository"
git status --short --branch
git log --graph --oneline --decorate --all
El primer comando cambia el directorio de trabajo de Terminal. git status muestra la rama activa y cualquier cambio local. La vista de gráfico te ayuda a ver qué commits están en la rama de origen y su orden. Terminal de macOS usa zsh por defecto, y los comandos anteriores utilizan una sintaxis de shell estándar admitida en él. Guía de Terminal de Apple
Si la rama necesaria es una rama de seguimiento remoto y su estado más reciente no está disponible localmente, haz un fetch antes de inspeccionarla:
git fetch origin
git log --reverse --oneline origin/feature-name
Reemplaza origin/feature-name por el nombre real de la rama remota. La opción reverse muestra los commits en orden cronológico (los más antiguos primero). Para un historial extenso, limita el log a los commits posteriores a una base común conocida; por ejemplo, git log --reverse --oneline base-commit..origin/feature-name. Lee los asuntos resultantes y luego inspecciona los cambios candidatos con git show COMMIT_ID. Un rango de commits es cómodo para revisar, pero no asumas que un argumento de rango garantiza por sí mismo el orden de dependencia personalizado que necesitas: los IDs de commit explícitos dejan clara la secuencia prevista.
Hacer cherry-pick en orden de prerrequisitos
Antes de empezar, haz commit o aparta de forma segura los cambios locales. La operación normal de cherry-pick requiere un árbol de trabajo limpio, y debes confirmar la rama de destino antes de aplicar nada. Sustituye los IDs de ejemplo por los IDs de commit reales, completos o abreviados, ordenados de prerrequisito a dependiente:
git switch destination-branch
git status --short --branch
git cherry-pick a1b2c3 d4e5f6
Git crea un nuevo commit para cada cambio seleccionado en el orden facilitado. Comprueba la salida con atención: si un cambio ya se había incluido por otra vía, o el destino ha divergido, Git puede notificar un cambio vacío o detenerse debido a un conflicto. Después, inspecciona el historial resultante y el árbol de trabajo con git log --oneline -n 5 y git status. Ejecuta las comprobaciones pertinentes del proyecto antes de dar por bueno el resultado; un cherry-pick limpio solo significa que Git aplicó los cambios, no que la funcionalidad se comporte como se espera.
Si un commit entra en conflicto
Cuando un pick entra en conflicto, Git se detiene en ese commit. Inspecciona los archivos afectados y resuelve cada conflicto combinando el cambio de origen previsto con el contenido actual de la rama de destino. Prepara (stage) los archivos resueltos con git add y continúa la secuencia:
git add "path/to/resolved-file"
git cherry-pick --continue
Usa git cherry-pick --abort para cancelar la secuencia actual y volver al estado previo a su inicio. Usa git cherry-pick --skip solo cuando hayas decidido que el cambio del commit actual debe omitirse; los commits posteriores pueden depender de él, por lo que saltárselo puede hacer que esos cambios fallen o pierdan su sentido. La documentación de Git describe continue, skip y abort como controles para una operación en curso. Opciones del secuenciador de git cherry-pick
En el caso de un commit de fusión (merge), detente antes de seleccionarlo: Git requiere elegir un padre principal (mainline) porque la fusión tiene más de un padre. Del mismo modo, si los commits posteriores no pueden entenderse sin una larga cadena de cambios previos, seleccionar solo unos pocos puede no producir un resultado coherente. Inspecciona las dependencias y elige la secuencia completa más pequeña que las preserve.
Fuentes
Cambiar el shell por omisión en Terminal en el Mac — Soporte técnico de Apple