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 -p
se necessário. Se você estiver começando com um patch, poderá substituí-lo cherry-pick
por 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 checkout
difere de cherry-pick
: checkout
tenta aplicar <commit>
completamente o conteúdo cherry-pick
de a confirmação especificada do pai. Isso significa que checkout
pode aplicar mais do que apenas essa confirmação, que pode ser mais do que você deseja.)