|  | git-cherry-pick(1) | 
|  | ================== | 
|  |  | 
|  | NAME | 
|  | ---- | 
|  | git-cherry-pick - Apply the changes introduced by some existing commits | 
|  |  | 
|  | SYNOPSIS | 
|  | -------- | 
|  | [verse] | 
|  | 'git cherry-pick' [--edit] [-n] [-m parent-number] [-s] [-x] [--ff] | 
|  | [-S[<keyid>]] <commit>... | 
|  | 'git cherry-pick' --continue | 
|  | 'git cherry-pick' --quit | 
|  | 'git cherry-pick' --abort | 
|  |  | 
|  | DESCRIPTION | 
|  | ----------- | 
|  |  | 
|  | Given one or more existing commits, apply the change each one | 
|  | introduces, recording a new commit for each.  This requires your | 
|  | working tree to be clean (no modifications from the HEAD commit). | 
|  |  | 
|  | When it is not obvious how to apply a change, the following | 
|  | happens: | 
|  |  | 
|  | 1. The current branch and `HEAD` pointer stay at the last commit | 
|  | successfully made. | 
|  | 2. The `CHERRY_PICK_HEAD` ref is set to point at the commit that | 
|  | introduced the change that is difficult to apply. | 
|  | 3. Paths in which the change applied cleanly are updated both | 
|  | in the index file and in your working tree. | 
|  | 4. For conflicting paths, the index file records up to three | 
|  | versions, as described in the "TRUE MERGE" section of | 
|  | linkgit:git-merge[1].  The working tree files will include | 
|  | a description of the conflict bracketed by the usual | 
|  | conflict markers `<<<<<<<` and `>>>>>>>`. | 
|  | 5. No other modifications are made. | 
|  |  | 
|  | See linkgit:git-merge[1] for some hints on resolving such | 
|  | conflicts. | 
|  |  | 
|  | OPTIONS | 
|  | ------- | 
|  | <commit>...:: | 
|  | Commits to cherry-pick. | 
|  | For a more complete list of ways to spell commits, see | 
|  | linkgit:gitrevisions[7]. | 
|  | Sets of commits can be passed but no traversal is done by | 
|  | default, as if the '--no-walk' option was specified, see | 
|  | linkgit:git-rev-list[1]. Note that specifying a range will | 
|  | feed all <commit>... arguments to a single revision walk | 
|  | (see a later example that uses 'maint master..next'). | 
|  |  | 
|  | -e:: | 
|  | --edit:: | 
|  | With this option, 'git cherry-pick' will let you edit the commit | 
|  | message prior to committing. | 
|  |  | 
|  | -x:: | 
|  | When recording the commit, append a line that says | 
|  | "(cherry picked from commit ...)" to the original commit | 
|  | message in order to indicate which commit this change was | 
|  | cherry-picked from.  This is done only for cherry | 
|  | picks without conflicts.  Do not use this option if | 
|  | you are cherry-picking from your private branch because | 
|  | the information is useless to the recipient.  If on the | 
|  | other hand you are cherry-picking between two publicly | 
|  | visible branches (e.g. backporting a fix to a | 
|  | maintenance branch for an older release from a | 
|  | development branch), adding this information can be | 
|  | useful. | 
|  |  | 
|  | -r:: | 
|  | It used to be that the command defaulted to do `-x` | 
|  | described above, and `-r` was to disable it.  Now the | 
|  | default is not to do `-x` so this option is a no-op. | 
|  |  | 
|  | -m parent-number:: | 
|  | --mainline parent-number:: | 
|  | Usually you cannot cherry-pick a merge because you do not know which | 
|  | side of the merge should be considered the mainline.  This | 
|  | option specifies the parent number (starting from 1) of | 
|  | the mainline and allows cherry-pick to replay the change | 
|  | relative to the specified parent. | 
|  |  | 
|  | -n:: | 
|  | --no-commit:: | 
|  | Usually the command automatically creates a sequence of commits. | 
|  | This flag applies the changes necessary to cherry-pick | 
|  | each named commit to your working tree and the index, | 
|  | without making any commit.  In addition, when this | 
|  | option is used, your index does not have to match the | 
|  | HEAD commit.  The cherry-pick is done against the | 
|  | beginning state of your index. | 
|  | + | 
|  | This is useful when cherry-picking more than one commits' | 
|  | effect to your index in a row. | 
|  |  | 
|  | -s:: | 
|  | --signoff:: | 
|  | Add Signed-off-by line at the end of the commit message. | 
|  | See the signoff option in linkgit:git-commit[1] for more information. | 
|  |  | 
|  | -S[<keyid>]:: | 
|  | --gpg-sign[=<keyid>]:: | 
|  | GPG-sign commits. The `keyid` argument is optional and | 
|  | defaults to the committer identity; if specified, it must be | 
|  | stuck to the option without a space. | 
|  |  | 
|  | --ff:: | 
|  | If the current HEAD is the same as the parent of the | 
|  | cherry-pick'ed commit, then a fast forward to this commit will | 
|  | be performed. | 
|  |  | 
|  | --allow-empty:: | 
|  | By default, cherry-picking an empty commit will fail, | 
|  | indicating that an explicit invocation of `git commit | 
|  | --allow-empty` is required. This option overrides that | 
|  | behavior, allowing empty commits to be preserved automatically | 
|  | in a cherry-pick. Note that when "--ff" is in effect, empty | 
|  | commits that meet the "fast-forward" requirement will be kept | 
|  | even without this option.  Note also, that use of this option only | 
|  | keeps commits that were initially empty (i.e. the commit recorded the | 
|  | same tree as its parent).  Commits which are made empty due to a | 
|  | previous commit are dropped.  To force the inclusion of those commits | 
|  | use `--keep-redundant-commits`. | 
|  |  | 
|  | --allow-empty-message:: | 
|  | By default, cherry-picking a commit with an empty message will fail. | 
|  | This option overrides that behavior, allowing commits with empty | 
|  | messages to be cherry picked. | 
|  |  | 
|  | --keep-redundant-commits:: | 
|  | If a commit being cherry picked duplicates a commit already in the | 
|  | current history, it will become empty.  By default these | 
|  | redundant commits cause `cherry-pick` to stop so the user can | 
|  | examine the commit. This option overrides that behavior and | 
|  | creates an empty commit object.  Implies `--allow-empty`. | 
|  |  | 
|  | --strategy=<strategy>:: | 
|  | Use the given merge strategy.  Should only be used once. | 
|  | See the MERGE STRATEGIES section in linkgit:git-merge[1] | 
|  | for details. | 
|  |  | 
|  | -X<option>:: | 
|  | --strategy-option=<option>:: | 
|  | Pass the merge strategy-specific option through to the | 
|  | merge strategy.  See linkgit:git-merge[1] for details. | 
|  |  | 
|  | SEQUENCER SUBCOMMANDS | 
|  | --------------------- | 
|  | include::sequencer.txt[] | 
|  |  | 
|  | EXAMPLES | 
|  | -------- | 
|  | `git cherry-pick master`:: | 
|  |  | 
|  | Apply the change introduced by the commit at the tip of the | 
|  | master branch and create a new commit with this change. | 
|  |  | 
|  | `git cherry-pick ..master`:: | 
|  | `git cherry-pick ^HEAD master`:: | 
|  |  | 
|  | Apply the changes introduced by all commits that are ancestors | 
|  | of master but not of HEAD to produce new commits. | 
|  |  | 
|  | `git cherry-pick maint next ^master`:: | 
|  | `git cherry-pick maint master..next`:: | 
|  |  | 
|  | Apply the changes introduced by all commits that are | 
|  | ancestors of maint or next, but not master or any of its | 
|  | ancestors.  Note that the latter does not mean `maint` and | 
|  | everything between `master` and `next`; specifically, | 
|  | `maint` will not be used if it is included in `master`. | 
|  |  | 
|  | `git cherry-pick master~4 master~2`:: | 
|  |  | 
|  | Apply the changes introduced by the fifth and third last | 
|  | commits pointed to by master and create 2 new commits with | 
|  | these changes. | 
|  |  | 
|  | `git cherry-pick -n master~1 next`:: | 
|  |  | 
|  | Apply to the working tree and the index the changes introduced | 
|  | by the second last commit pointed to by master and by the last | 
|  | commit pointed to by next, but do not create any commit with | 
|  | these changes. | 
|  |  | 
|  | `git cherry-pick --ff ..next`:: | 
|  |  | 
|  | If history is linear and HEAD is an ancestor of next, update | 
|  | the working tree and advance the HEAD pointer to match next. | 
|  | Otherwise, apply the changes introduced by those commits that | 
|  | are in next but not HEAD to the current branch, creating a new | 
|  | commit for each new change. | 
|  |  | 
|  | `git rev-list --reverse master -- README | git cherry-pick -n --stdin`:: | 
|  |  | 
|  | Apply the changes introduced by all commits on the master | 
|  | branch that touched README to the working tree and index, | 
|  | so the result can be inspected and made into a single new | 
|  | commit if suitable. | 
|  |  | 
|  | The following sequence attempts to backport a patch, bails out because | 
|  | the code the patch applies to has changed too much, and then tries | 
|  | again, this time exercising more care about matching up context lines. | 
|  |  | 
|  | ------------ | 
|  | $ git cherry-pick topic^             <1> | 
|  | $ git diff                           <2> | 
|  | $ git reset --merge ORIG_HEAD        <3> | 
|  | $ git cherry-pick -Xpatience topic^  <4> | 
|  | ------------ | 
|  | <1> apply the change that would be shown by `git show topic^`. | 
|  | In this example, the patch does not apply cleanly, so | 
|  | information about the conflict is written to the index and | 
|  | working tree and no new commit results. | 
|  | <2> summarize changes to be reconciled | 
|  | <3> cancel the cherry-pick.  In other words, return to the | 
|  | pre-cherry-pick state, preserving any local modifications you had in | 
|  | the working tree. | 
|  | <4> try to apply the change introduced by `topic^` again, | 
|  | spending extra time to avoid mistakes based on incorrectly matching | 
|  | context lines. | 
|  |  | 
|  | SEE ALSO | 
|  | -------- | 
|  | linkgit:git-revert[1] | 
|  |  | 
|  | GIT | 
|  | --- | 
|  | Part of the linkgit:git[1] suite |