Ядро вещь , которую вы собираетесь хотите здесь git add -p( -pэто синоним --patch). Это обеспечивает интерактивный способ регистрации контента, позволяя вам решить, должен ли каждый ханк входить, и даже позволяет вам вручную редактировать патч, если это необходимо.
Чтобы использовать его в сочетании с вишней:
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!
(Спасибо Тиму Хенигану за напоминание о том, что у git-cherry-pick есть опция --no-commit, и спасибо Феликсу Рабу за то, что он указал, что вам нужно выполнить сброс! Если вы хотите оставить некоторые вещи вне коммита Вы можете использовать git reset <path>...для удаления только эти файлы.)
Конечно, вы можете указать конкретные пути, add -pесли это необходимо. Если вы начинаете с патчем вы могли бы заменить cherry-pickс apply.
Если вы действительно хотите git cherry-pick -p <commit>(эта опция не существует), вы можете использовать
git checkout -p <commit>
Это будет отличать текущий коммит от указанного вами коммита и позволит вам применять фрагменты из этого дифференцирования индивидуально. Эта опция может быть более полезной, если коммит, который вы извлекаете, имеет конфликты слияния в части коммита, в которой вы не заинтересованы. (Обратите внимание, однако, что он checkoutотличается от cherry-pick: checkoutпытается полностью применить <commit>содержимое, cherry-pickприменяет разность указанный коммит от его родителя. Это означает, что checkoutможет применить больше, чем просто коммит, который может быть больше, чем вы хотите.)