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