A principal coisa que você vai querer aqui é git add -p( -pé um sinônimo --patch). Isso fornece uma maneira interativa de fazer check-in de conteúdo, permitindo que você decida se cada pedaço deve entrar e até mesmo editando manualmente o patch, se necessário.
Para usá-lo em combinação com a seleção de cereja:
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!
(Obrigado a Tim Henigan por me lembrar que o git-cherry-pick tem uma opção --no-commit, e obrigado a Felix Rabe por apontar que você precisa redefinir! Se você quiser apenas deixar algumas coisas de fora do commit , você pode usar git reset <path>...para desfazer apenas esses arquivos.)
Obviamente, você pode fornecer caminhos específicos para, add -pse necessário. Se você estiver começando com um patch, poderá substituí-lo cherry-pickpor apply.
Se você realmente deseja um git cherry-pick -p <commit>(essa opção não existe), pode usar
git checkout -p <commit>
Isso diferenciará o commit atual em relação ao commit que você especificar e permitirá que você aplique pedaços desse diff individualmente. Essa opção pode ser mais útil se o commit que você está recebendo tiver conflitos de mesclagem em parte do commit que você não está interessado. (Observe, no entanto, que checkoutdifere de cherry-pick: checkouttenta aplicar <commit>completamente o conteúdo cherry-pickde a confirmação especificada do pai. Isso significa que checkoutpode aplicar mais do que apenas essa confirmação, que pode ser mais do que você deseja.)