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.50.1 → 2.51.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
встановлено так, щоб воно вказувало на коміт, який вніс зміну. -
Шляхи, в яких зміни застосовано чисто, оновлюються як у файлі індексу, так і у вашому робочому дереві.
-
Для конфліктуючих шляхів індексний файл записує до трьох версій, як описано в розділі "TRUE MERGE" сторінки git-merge[1]. Робочі файли дерева міститимуть опис конфлікту, обведений у дужки звичайними маркерами конфлікту <<<<<<< та >>>>>>.
-
Жодних інших модифікацій не вноситься.
Дивіться git-merge[1] для отримання деяких підказок щодо вирішення таких конфліктів.
ОПЦІЇ
- <commit>…
-
Коміти для вибору вишневого списку. Повніший список способів написання комітів див. у 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 <батьківський номер>
-
Зазвичай ви не можете вибрати злиття за допомогою 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-sign. Аргумент
keyid
є необов’язковим і за замовчуванням використовує ідентифікатор комітера; якщо його вказано, він має бути прив’язаний до опції без пробілу.--no-gpg-sign
корисний для скасування як змінної конфігураціїcommit.gpgSign
, так і попередньої змінної--gpg-sign
. - --ff
-
Якщо поточний HEAD збігається з батьківським комітом обраного методом cherry-pick, то буде виконано перемотування вперед до цього коміту.
- --allow-empty
-
За замовчуванням, вибір порожнього коміту за допомогою cherry-pick завершиться невдачею, що вказує на необхідність явного виклику
git
commit
--allow-empty
. Ця опція замінює цю поведінку, дозволяючи автоматично зберігати порожні коміти у cherry-pick. Зверніть увагу, що коли діє "--ff", порожні коміти, які відповідають вимозі "fastforward", будуть збережені навіть без цієї опції. Також зауважте, що використання цієї опції зберігає лише ті коміти, які були спочатку порожніми (тобто коміт записав те саме дерево, що й його батьківський коміт). Коміти, які стали порожніми через попередній коміт, призведуть до невдалого вибору cherry-pick. Щоб примусово включити ці коміти, використовуйте--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
— це гарний спосіб перевірити, що зробивrerere
, та виявити потенційні помилки злиття, перш ніж занести результат до індексу за допомогою окремогоgit
add
.
ПІДКОМАНДИ СЕКВЕНСЕРА
- --continue
-
Продовжуйте поточну операцію, використовуючи інформацію з
.git/sequencer
. Можна використовувати для продовження після вирішення конфліктів у невдалому виборі вишневого коду або поверненні. - --skip
-
Пропустити поточний коміт та продовжити решту послідовності.
- --quit
-
Забудьте про поточну операцію, що виконується. Може використовуватися для очищення стану секвенсора після невдалого вибору попередніх налаштувань або повернення до попереднього стану.
- --abort
-
Скасувати операцію та повернутися до стану перед послідовністю.
ПРИКЛАДИ
-
git
cherry-pick
master
-
Застосуйте зміни, внесені комітом на кінчику гілки master, та створіть новий коміт з цією зміною.
-
git
cherry-pick
..master
-
git
cherry-pick
^HEAD
master
-
Застосувати зміни, внесені всіма комітами, що є предками master, але не HEAD, для створення нових комітів.
-
git
cherry-pick
maint
next
^master
-
git
cherry-pick
maint
master..next
-
Застосувати зміни, внесені всіма комітами, що є предками maint або next, але не master або будь-якого з його предків. Зверніть увагу, що останнє не означає
maint
та все, що знаходиться міжmaster
таnext
; зокрема,maint
не використовуватиметься, якщо він включений доmaster
. -
git
cherry-pick
master~4
master~2
-
Застосуйте зміни, внесені п’ятим та третім останнім комітами, на які вказує master, та створіть 2 нових коміти з цими змінами.
-
git
cherry-pick
-n
master~1
next
-
Застосувати до робочого дерева та індексу зміни, внесені передостаннім комітом, на який вказує master, та останнім комітом, на який вказує next, але не створювати жодного коміту з цими змінами.
-
git
cherry-pick
--ff
..next
-
Якщо історія лінійна, а HEAD є предком next, оновіть робоче дерево та змістіть вказівник HEAD, щоб він відповідав next. В іншому випадку застосуйте зміни, внесені тими коммітами, які знаходяться в next, але не в HEAD, до поточної гілки, створюючи новий коміт для кожної нової зміни.
-
git
rev-list
--reverse
master
--
README
|git
cherry-pick
-n
--stdin
-
Застосуйте зміни, внесені всіма коммітами на гілці master, що стосувалися README, до робочого дерева та індексу, щоб результат можна було перевірити та, за потреби, перетворити на один новий коміт.
Наведена нижче послідовність намагається перенести патч, завершує роботу, оскільки код, до якого застосовується патч, занадто сильно змінився, а потім намагається знову, цього разу приділяючи більше уваги збігу рядків контексту.
$ git cherry-pick topic^ (1) $ git diff (2) $ git cherry-pick --abort (3) $ git cherry-pick -Xpatience topic^ (4)
-
застосуйте зміни, які будуть показані командою
git
show
topic^
. У цьому прикладі патч застосовується не повністю, тому інформація про конфлікт записується в індекс та робоче дерево, і нові зміни не створюються. -
підсумувати зміни, що підлягають узгодженню
-
скасувати вибірку. Іншими словами, повернутися до стану до вибору, зберігаючи будь-які локальні зміни, які ви мали в робочому дереві.
-
спробуйте застосувати зміну, внесену
topic^
, ще раз, витративши додатковий час, щоб уникнути помилок, пов’язаних з неправильно зіставленими рядками контексту.
GIT
Частина набору git[1]