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 <parent-number>] [-s] [-x] [--ff] [-S[<keyid>]] <commit>… 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]. Зверніть увагу, що вказання діапазону передасть усі аргументи <commit>… до одного обходу ревізій (див. приклад далі, де використовується maint master..next). - -e
- --edit
-
З цією опцією, git cherry-pick дозволить вам редагувати повідомлення коміту перед його створенням.
- --cleanup=<mode>
-
Цей параметр визначає, як повідомлення коміту буде очищено перед передачею на механізм комітів. Див. git-commit[1] для отримання додаткової інформації. Зокрема, якщо для <mode> надано значення
scissors, scissors буде додано доMERGE_MSGперед передачею у разі конфлікту. - -x
-
Під час запису коміту додайте до оригінального повідомлення про коміт рядок «(вибрано з коміту …)», щоб вказати, з якого саме коміту було вибрано цю зміну. Це робиться лише для вибраних змін без конфліктів. Не використовуйте цю опцію, якщо ви вибираєте зміни з вашої приватної гілки, оскільки ця інформація є марною для одержувача. Якщо ж ви вибираєте зміни між двома загальнодоступними гілками (наприклад, переносите виправлення з гілки розробки до гілки обслуговування для старішого випуску), додавання цієї інформації може бути корисним.
- -r
-
Раніше команда автоматично виконувала описану вище дію
-x, а опція-rпризначалася для її відключення. Тепер стандартним варіантом є відмова від виконання-x, тому ця опція не виконує жодних дій. - -m <parent-number>
- --mainline <parent-number>
-
Зазвичай ви не можете вибрати злиття за допомогою cherry-pick, оскільки не знаєте, яку сторону злиття слід вважати основною лінією. Ця опція вказує номер батьківського елемента (починаючи з 1) основної лінії та дозволяє cherry-pick відтворити зміну відносно зазначеного батьківського елемента.
- -n
- --no-commit
-
Зазвичай ця команда автоматично створює послідовність комітів. Цей прапорець застосовує зміни, необхідні для вибіркового додавання кожного вказаного коміту до робочого дерева та індексу, не створюючи при цьому жодного коміту. Крім того, при використанні цієї опції індекс не обов’язково має збігатися з комітом HEAD. Вибіркове додавання виконується відносно початкового стану індексу.
Це корисно, коли потрібно послідовно додати до індексу зміни з декількох комітів.
- -s
- --signoff
-
Додає трейлер
Signed-off-byв кінці повідомлення коміту. Дивіться опцію підписання в git-commit[1] для отримання додаткової інформації. - -S[<keyid>]
- --gpg-sign[=<keyid>]
- --no-gpg-sign
-
Підписувати коміти за допомогою GPG. Аргумент
keyidє необов’язковим, а стандартним значенням є ідентифікатор автора коміту; якщо його вказано, він повинен бути вказаний безпосередньо після опції без пробілу. Опція--no-gpg-signдозволяє скасувати дію як конфігураційної змінноїcommit.gpgSign, так і раніше вказаної опції--gpg-sign. - --ff
-
Якщо поточний HEAD збігається з батьківським комітом обраного методом cherry-pick, то буде виконано перемотування вперед до цього коміту.
- --allow-empty
-
Зазвичай вибір окремих змін (cherry-pick) з порожнього коміту завершиться невдачею, що вказує на необхідність явного виклику команди
gitcommit--allow-empty. Ця опція змінює таку поведінку, дозволяючи автоматично зберігати порожні коміти під час вибору окремих змін. Зверніть увагу, що коли діє опція «--ff», порожні коміти, які відповідають вимогам «fast-forward», зберігатимуться навіть без цієї опції. Також зверніть увагу, що використання цієї опції зберігає лише ті коміти, які спочатку були порожніми (тобто коміт записав те саме дерево, що й його батько). Коміти, які стали порожніми внаслідок попереднього коміту, призведуть до невдачі вибору. Щоб примусово включити ці коміти, використовуйте--empty=keep. - --allow-empty-message
-
Стандартно копіювання окремого коміту з порожнім повідомленням завершиться невдачею. Ця опція змінює цю поведінку, дозволяючи копіювати окремі коміти з порожніми повідомленнями.
- --empty=(drop|keep|stop)
-
Як поводитися з комітами, які вибираються окремо (cherry-pick) і дублюють зміни, що вже містяться в поточній історії.
Зверніть увагу, що
--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].
СУБКОМАНДИ СЕКВЕНСОРА
- --continue
-
Продовжити поточну операцію, використовуючи інформацію з теки
.git/sequencer. Цю функцію можна використовувати для продовження роботи після усунення конфліктів, що виникли під час невдалого вибору змін або відкату (cherry-pick або revert). - --skip
-
Пропустити поточний коміт та продовжити решту послідовності.
- --quit
-
Забути про поточну операцію, що виконується. Може використовуватися для очищення стану секвенсора після невдалого вибіркового відновлення або відкату (cherry-pick або revert.).
- --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, до робочого дерева та індексу, щоб результат можна було перевірити та, за потреби, перетворити на один новий коміт.
Наведена нижче послідовність намагається перенести латку, завершує роботу, оскільки код, до якого застосовується латка, занадто сильно змінився, а потім намагається знову, цього разу приділяючи більше уваги збігу рядків контексту.
$ git cherry-pick topic^ (1) $ git diff (2) $ git cherry-pick --abort (3) $ git cherry-pick -Xpatience topic^ (4)
-
застосує зміни, які будуть показані командою
gitshowtopic^. У цьому прикладі латка застосовується не повністю, тому інформація про конфлікт записується в індекс та робоче дерево, і нові зміни не створюються. -
узагальнення змін, що підлягають узгодженню
-
скасувати вибірку. Іншими словами, повернутися до стану до вибору, зберігаючи будь-які локальні зміни, які ви мали в робочому дереві.
-
спробувати застосувати зміну, внесену
topic^, ще раз, витративши додатковий час, щоб уникнути помилок, повʼязаних з неправильно зіставленими рядками контексту.
GIT
Частина набору git[1]