Я не знаю о команде, но просто нажмите «ctrl + h» диалоговое окно, которое появляется, когда у вас есть то, что вам нужно
Главное, что вам нужно здесь, это 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
, чтобы деактивировать только эти файлы.)
Вы, конечно, можете указать конкретные пути к add -p
, если необходимо. Если ты' при запуске патча вы можете заменить cherry-pick
на apply
.
Если вам действительно нужен git cherry-pick -p
(такой опции не существует), вы можете использовать
git checkout -p <commit>
, который будет сравнивать текущую фиксацию с указанной вами фиксацией и позволит вам применять блоки из этой разницы индивидуально. Эта опция может быть более полезной, если коммит, который вы втягиваете, имеет конфликты слияния в части коммита, который вас не интересует. (Однако обратите внимание, что checkout
отличается от cherry-pick
: checkout
пытается полностью применить содержимое
, cherry-pick
применяет различие указанного коммита от его родителя.
Если Вы хотите указать список файлов на командной строке и сделать все это в единственной атомарной команде, попробуйте:
git apply --3way <(git show -- list-of-files)
--3way
: Если патч не будет применяться чисто, то Мерзавец создаст конфликт слияния, таким образом, можно будет работать git mergetool
. Исключение --3way
заставит Мерзавца разочароваться в патчах, которые не применяются чисто.
Предполагая, что нужные изменения находятся в начале ветки, из которой вы хотите внести изменения, используйте git checkout
для одного файла:
git checkout branch_that_has_the_changes_you_want path/to/file.rb
для нескольких файлов просто шлейфовое соединение:
git checkout branch_that_has_the_changes_you_want path/to/file.rb path/to/other_file.rb