Setup and Config
Getting and Creating Projects
Basic Snapshotting
Branching and Merging
Sharing and Updating Projects
Inspection and Comparison
Patching
Debugging
External Systems
Server Admin
Guides
- gitattributes
- Command-line interface conventions
- Everyday Git
- Frequently Asked Questions (FAQ)
- Glossary
- Hooks
- gitignore
- gitmodules
- Revisions
- Submodules
- Tutorial
- Workflows
- All guides...
Administration
Plumbing Commands
-
2.54.0
2026-04-20
- 2.50.1 → 2.53.0 no changes
-
2.50.0
2025-06-16
- 2.45.1 → 2.49.1 no changes
-
2.45.0
2024-04-29
- 2.39.4 → 2.44.4 no changes
-
2.39.3
2023-04-17
- 2.38.1 → 2.39.2 no changes
-
2.38.0
2022-10-02
- 2.35.1 → 2.37.7 no changes
-
2.35.0
2022-01-24
- 2.30.1 → 2.34.8 no changes
-
2.30.0
2020-12-27
- 2.27.1 → 2.29.3 no changes
-
2.27.0
2020-06-01
- 2.23.1 → 2.26.3 no changes
-
2.23.0
2019-08-16
- 2.22.1 → 2.22.5 no changes
-
2.22.0
2019-06-07
- 2.21.1 → 2.21.4 no changes
-
2.21.0
2019-02-24
- 2.10.5 → 2.20.5 no changes
-
2.9.5
2017-07-30
- 2.8.6 no changes
-
2.7.6
2017-07-30
-
2.6.7
2017-05-05
- 2.4.12 → 2.5.6 no changes
-
2.3.10
2015-09-28
- 2.1.4 → 2.2.3 no changes
-
2.0.5
2014-12-17
ОБЗОР
git cherry-pick [--edit] [-n] [-m <номер-родителя>] [-s] [-x] [--ff]
[-S[<id-ключа>]] <коммит>…
git cherry-pick (--continue | --skip | --abort | --quit)
ОПИСАНИЕ
Имея один или несколько существующих коммитов, применить изменение, которое вносит каждый из них, записывая новый коммит для каждого. Для этого требуется, чтобы ваш рабочий каталог был чистым (без изменений относительно коммита HEAD).
Когда не очевидно, как применить изменение, происходит следующее:
-
Текущая ветка и указатель
HEADостаются на последнем успешно созданном коммите. -
Ссылка
CHERRY_PICK_HEADустанавливается так, чтобы указывать на коммит, который внёс изменение, которое трудно применить. -
Пути, в которых изменение применилось чисто, обновляются как в файле индекса, так и в вашем рабочем каталоге.
-
Для конфликтующих путей файл индекса записывает до трёх версий, как описано в разделе «ИСТИННОЕ СЛИЯНИЕ» в git-merge[1]. Файлы рабочего каталога будут включать описание конфликта, заключённое в обычные маркеры конфликта <<<<<<< и >>>>>>>.
-
Никаких других изменений не делается.
См. git-merge[1] для получения некоторых советов по разрешению таких конфликтов.
ПАРАМЕТРЫ
- <commit>…
-
Коммиты для копирования (cherry-pick). Более полный список способов указания коммитов см. в gitrevisions[7]. Можно передавать наборы коммитов, но по умолчанию обход не выполняется, как если бы был указан параметр
--no-walk, см. git-rev-list[1]. Обратите внимание, что указание диапазона передаст все аргументы <коммит>… в один обход редакций (см. пример ниже, использующий maint master..next). - -e
- --edit
-
С этой опцией git cherry-pick позволит вам редактировать сообщение коммита перед фиксацией.
- --cleanup=<режим>
-
Этот параметр определяет, как сообщение коммита будет очищено перед передачей механизму фиксации. Дополнительные сведения см. в git-commit[1]. В частности, если <режиму> присвоено значение
scissors, в случае конфликта кMERGE_MSGбудет добавлен разделительscissorsперед передачей. - -x
-
При записи коммита добавляет строку «(cherry picked from commit …)» к исходному сообщению коммита, чтобы указать, из какого коммита было скопировано это изменение. Это делается только для копирования без конфликтов. Не используйте эту опцию, если вы копируете из своей личной ветки, потому что эта информация бесполезна для получателя. Если, с другой стороны, вы копируете между двумя публично видимыми ветками (например, переносите исправление в ветку сопровождения для более старого выпуска из ветки разработки), добавление этой информации может быть полезным.
- -r
-
Раньше команда по умолчанию выполняла
-x, как описано выше, а-rотключал это. Теперь по умолчанию-xне выполняется, поэтому эта опция ничего не делает. - -m <номер-родителя>
- --mainline <номер-родителя>
-
Обычно вы не можете скопировать слияние, потому что не знаете, какая сторона слияния должна считаться основной линией. Эта опция указывает номер родителя (начиная с 1) основной линии и позволяет cherry-pick воспроизвести изменение относительно указанного родителя.
- -n
- --no-commit
-
Обычно команда автоматически создаёт последовательность коммитов. Этот флаг применяет изменения, необходимые для копирования каждого указанного коммита в ваш рабочий каталог и индекс, без создания какого-либо коммита. Кроме того, при использовании этой опции ваш индекс не должен соответствовать коммиту HEAD. Копирование выполняется относительно начального состояния вашего индекса.
Это полезно при последовательном копировании эффектов более чем одного коммита в ваш индекс.
- -s
- --signoff
-
Добавляет завершитель (trailer)
Signed-off-byв конец сообщения коммита. Дополнительную информацию см. в описании опции signoff в git-commit[1]. - -S[<id-ключа>]
- --gpg-sign[=<id-ключа>]
- --no-gpg-sign
-
Подписывать коммиты с помощью GPG. Аргумент id-ключа необязателен, и если не указан, в качестве значения по умолчанию будет использоваться личное имя коммиттера; если аргумент указан, он должен следовать сразу после параметра, без пробела. Параметр
--no-gpg-signполезен, если нужно отменить переменную конфигурацииcommit.gpgSignили параметр--gpg-sign, заданный ранее. - --ff
-
Если текущий HEAD совпадает с родителем скопированного коммита, то будет выполнена перемотка вперёд (fast-forward) до этого коммита.
- --allow-empty
-
По умолчанию копирование пустого коммита завершится ошибкой, указывая на то, что требуется явный вызов
gitcommit--allow-empty. Эта опция отменяет это поведение, позволяя автоматически сохранять пустые коммиты при копировании. Обратите внимание, что когда действует «--ff», пустые коммиты, удовлетворяющие требованию «fast-forward», будут сохранены даже без этой опции. Также обратите внимание, что использование этой опции сохраняет только те коммиты, которые были изначально пустыми (т.е. коммит записал то же дерево, что и его родитель). Коммиты, которые стали пустыми из-за предыдущего коммита, вызовут ошибку копирования. Чтобы принудительно включить эти коммиты, используйте--empty=keep. - --allow-empty-message
-
По умолчанию копирование коммита с пустым сообщением завершится ошибкой. Эта опция отменяет это поведение, позволяя копировать коммиты с пустыми сообщениями.
- --empty=(drop|keep|stop)
-
Как обрабатывать коммиты, которые копируются и являются избыточными по отношению к изменениям, уже существующим в текущей истории.
Обратите внимание, что
--empty=dropи--empty=stopуказывают только, как обрабатывать коммит, который не был изначально пустым, а стал пустым из-за предыдущего коммита. Коммиты, которые были изначально пустыми, по-прежнему будут вызывать ошибку копирования, если не указаны--empty=keepили--allow-empty. - --keep-redundant-commits
-
Устаревший синоним для
--empty=keep. - --strategy=<strategy>
-
Использовать указанную стратегию слияния. Должна использоваться только один раз. Подробности см. в разделе СТРАТЕГИИ СЛИЯНИЯ в git-merge[1].
- -X<option>
- --strategy-option=<option>
-
Передать параметр, специфичный для стратегии слияния, самой стратегии слияния. Подробности см. в git-merge[1].
-
--rerere-autoupdate -
--no-rerere-autoupdate -
После того как механизм rerere повторно использует записанное ранее разрешение на текущем конфликте для обновления файлов в рабочем каталоге, разрешить также обновить индекс, применив к нему результат разрешения. Параметр
--no-rerere-autoupdateможно использовать как удобный способ дважды проверить результат работы git-rerere[1] и поймать потенциальные ошибки слияния до того, как зафиксировать результат в индексе с помощью отдельной команды git-add[1].
ПОДКОМАНДЫ ПОСЛЕДОВАТЕЛЯ (SEQUENCER)
- --continue
-
Продолжить выполняющуюся операцию, используя информацию в
.git/sequencer. Может использоваться для продолжения после разрешения конфликтов в неудачном копировании коммита или отмене. - --skip
-
Пропустить текущий коммит и продолжить с остальной частью последовательности.
- --quit
-
Забыть о текущей выполняющейся операции. Может использоваться для очистки состояния механизма последовательности после неудачного копирования коммита или отмены.
- --abort
-
Отменить операцию и вернуться в состояние до последовательности.
ПРИМЕРЫ
-
gitcherry-pickmaster -
Применить изменение, внесённое коммитом на верхушке ветки master, и создать новый коммит с этим изменением.
-
gitcherry-pick..master -
gitcherry-pick^HEADmaster -
Применить изменения, внесённые всеми коммитами, которые являются предками master, но не HEAD, чтобы создать новые коммиты.
-
gitcherry-pickmaintnext^master -
gitcherry-pickmaintmaster..next -
Применить изменения, внесённые всеми коммитами, которые являются предками maint или next, но не master или любого из его предков. Обратите внимание, что последнее не означает
maintи всё междуmasterиnext; в частности,maintне будет использоваться, если он включён вmaster. -
gitcherry-pickmaster~4master~2 -
Применить изменения, внесённые пятым и третьим с конца коммитами, на которые указывает master, и создать 2 новых коммита с этими изменениями.
-
gitcherry-pick-nmaster~1next -
Применить к рабочему каталогу и индексу изменения, внесённые предпоследним коммитом, на который указывает master, и последним коммитом, на который указывает next, но не создавать никаких коммитов с этими изменениями.
-
gitcherry-pick--ff..next -
Если история линейна и HEAD является предком next, обновить рабочий каталог и переместить указатель HEAD, чтобы он соответствовал next. В противном случае, применить изменения, внесённые теми коммитами, которые находятся в next, но не в HEAD, к текущей ветке, создавая новый коммит для каждого нового изменения.
-
gitrev-list--reversemaster--README|gitcherry-pick-n--stdin -
Применить к рабочему каталогу и индексу изменения, внесённые всеми коммитами в ветке master, которые затронули README, чтобы результат можно было проверить и, если необходимо, превратить в один новый коммит.
Следующая последовательность пытается перенести патч (backport), прерывается, потому что код, к которому применяется патч, слишком сильно изменился, а затем пытается снова, на этот раз проявляя больше осторожности при сопоставлении строк контекста.
$ git cherry-pick topic^ (1) $ git diff (2) $ git cherry-pick --abort (3) $ git cherry-pick -Xpatience topic^ (4)
-
применить изменение, которое показала бы команда
gitshowtopic^. В этом примере патч не применяется чисто, поэтому информация о конфликте записывается в индекс и рабочий каталог, и новый коммит не создаётся. -
просмотреть изменения, которые необходимо согласовать
-
отменить копирование. Другими словами, вернуться к состоянию до копирования, сохранив любые локальные изменения, которые были в рабочем каталоге.
-
попытаться применить изменение, внесённое
topic^, снова, затрачивая дополнительное время, чтобы избежать ошибок, основанных на неправильном сопоставлении строк контекста.
GIT
Является частью пакета git[1]