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