Главное, что вам здесь нужно, это 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
может применить больше, чем просто этот коммит, который может быть больше, чем вы хотите.)