Lo principal que querrás aquí es git add -p( -pes sinónimo de --patch). Esto proporciona una forma interactiva de registrar el contenido, permitiéndole decidir si cada trozo debe entrar e incluso permitiéndole editar manualmente el parche si es necesario.
Para usarlo en combinación con cherry-pick:
git cherry-pick -n <commit> # get your patch, but don't commit (-n = --no-commit)
git reset # unstage the changes from the cherry-picked commit
git add -p # make all your choices (add the changes you do want)
git commit # make the commit!
(¡Gracias a Tim Henigan por recordarme que git-cherry-pick tiene una opción --no-commit, y gracias a Felix Rabe por señalar que necesita reiniciar! Si solo quiere dejar algunas cosas fuera del commit , podría usar git reset <path>...para desestabilizar solo esos archivos).
Por supuesto, puede proporcionar rutas específicas add -psi es necesario. Si está comenzando con un parche, puede reemplazarlo cherry-pickpor apply.
Si realmente quieres un git cherry-pick -p <commit>(esa opción no existe), puedes usar
git checkout -p <commit>
Eso diferenciará la confirmación actual contra la confirmación que especifique, y le permitirá aplicar trozos de esa diferencia individualmente. Esta opción puede ser más útil si la confirmación que está realizando tiene conflictos de fusión en parte de la confirmación que no le interesa. (Tenga en cuenta, sin embargo, que checkoutdifiere de cherry-pick: checkoutintenta aplicar <commit>los contenidos por completo, cherry-pickaplica la diferencia de el commit especificado de su padre. Esto significa que checkoutpuede aplicar más que solo ese commit, que podría ser más de lo que desea).