Lo principal que querrás aquí es git add -p
( -p
es 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 -p
si es necesario. Si está comenzando con un parche, puede reemplazarlo cherry-pick
por 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 checkout
difiere de cherry-pick
: checkout
intenta aplicar <commit>
los contenidos por completo, cherry-pick
aplica la diferencia de el commit especificado de su padre. Esto significa que checkout
puede aplicar más que solo ese commit, que podría ser más de lo que desea).