| git-cherry(1) | 
 | ============= | 
 |  | 
 | NAME | 
 | ---- | 
 | git-cherry - Find commits yet to be applied to upstream | 
 |  | 
 | SYNOPSIS | 
 | -------- | 
 | [verse] | 
 | 'git cherry' [-v] [<upstream> [<head> [<limit>]]] | 
 |  | 
 | DESCRIPTION | 
 | ----------- | 
 | Determine whether there are commits in `<head>..<upstream>` that are | 
 | equivalent to those in the range `<limit>..<head>`. | 
 |  | 
 | The equivalence test is based on the diff, after removing whitespace | 
 | and line numbers.  git-cherry therefore detects when commits have been | 
 | "copied" by means of linkgit:git-cherry-pick[1], linkgit:git-am[1] or | 
 | linkgit:git-rebase[1]. | 
 |  | 
 | Outputs the SHA1 of every commit in `<limit>..<head>`, prefixed with | 
 | `-` for commits that have an equivalent in <upstream>, and `+` for | 
 | commits that do not. | 
 |  | 
 | OPTIONS | 
 | ------- | 
 | -v:: | 
 | 	Show the commit subjects next to the SHA1s. | 
 |  | 
 | <upstream>:: | 
 | 	Upstream branch to search for equivalent commits. | 
 | 	Defaults to the upstream branch of HEAD. | 
 |  | 
 | <head>:: | 
 | 	Working branch; defaults to HEAD. | 
 |  | 
 | <limit>:: | 
 | 	Do not report commits up to (and including) limit. | 
 |  | 
 | EXAMPLES | 
 | -------- | 
 |  | 
 | Patch workflows | 
 | ~~~~~~~~~~~~~~~ | 
 |  | 
 | git-cherry is frequently used in patch-based workflows (see | 
 | linkgit:gitworkflows[7]) to determine if a series of patches has been | 
 | applied by the upstream maintainer.  In such a workflow you might | 
 | create and send a topic branch like this: | 
 |  | 
 | ------------ | 
 | $ git checkout -b topic origin/master | 
 | # work and create some commits | 
 | $ git format-patch origin/master | 
 | $ git send-email ... 00* | 
 | ------------ | 
 |  | 
 | Later, you can see whether your changes have been applied by saying | 
 | (still on `topic`): | 
 |  | 
 | ------------ | 
 | $ git fetch  # update your notion of origin/master | 
 | $ git cherry -v | 
 | ------------ | 
 |  | 
 | Concrete example | 
 | ~~~~~~~~~~~~~~~~ | 
 |  | 
 | In a situation where topic consisted of three commits, and the | 
 | maintainer applied two of them, the situation might look like: | 
 |  | 
 | ------------ | 
 | $ git log --graph --oneline --decorate --boundary origin/master...topic | 
 | * 7654321 (origin/master) upstream tip commit | 
 | [... snip some other commits ...] | 
 | * cccc111 cherry-pick of C | 
 | * aaaa111 cherry-pick of A | 
 | [... snip a lot more that has happened ...] | 
 | | * cccc000 (topic) commit C | 
 | | * bbbb000 commit B | 
 | | * aaaa000 commit A | 
 | |/ | 
 | o 1234567 branch point | 
 | ------------ | 
 |  | 
 | In such cases, git-cherry shows a concise summary of what has yet to | 
 | be applied: | 
 |  | 
 | ------------ | 
 | $ git cherry origin/master topic | 
 | - cccc000... commit C | 
 | + bbbb000... commit B | 
 | - aaaa000... commit A | 
 | ------------ | 
 |  | 
 | Here, we see that the commits A and C (marked with `-`) can be | 
 | dropped from your `topic` branch when you rebase it on top of | 
 | `origin/master`, while the commit B (marked with `+`) still needs to | 
 | be kept so that it will be sent to be applied to `origin/master`. | 
 |  | 
 |  | 
 | Using a limit | 
 | ~~~~~~~~~~~~~ | 
 |  | 
 | The optional <limit> is useful in cases where your topic is based on | 
 | other work that is not in upstream.  Expanding on the previous | 
 | example, this might look like: | 
 |  | 
 | ------------ | 
 | $ git log --graph --oneline --decorate --boundary origin/master...topic | 
 | * 7654321 (origin/master) upstream tip commit | 
 | [... snip some other commits ...] | 
 | * cccc111 cherry-pick of C | 
 | * aaaa111 cherry-pick of A | 
 | [... snip a lot more that has happened ...] | 
 | | * cccc000 (topic) commit C | 
 | | * bbbb000 commit B | 
 | | * aaaa000 commit A | 
 | | * 0000fff (base) unpublished stuff F | 
 | [... snip ...] | 
 | | * 0000aaa unpublished stuff A | 
 | |/ | 
 | o 1234567 merge-base between upstream and topic | 
 | ------------ | 
 |  | 
 | By specifying `base` as the limit, you can avoid listing commits | 
 | between `base` and `topic`: | 
 |  | 
 | ------------ | 
 | $ git cherry origin/master topic base | 
 | - cccc000... commit C | 
 | + bbbb000... commit B | 
 | - aaaa000... commit A | 
 | ------------ | 
 |  | 
 |  | 
 | SEE ALSO | 
 | -------- | 
 | linkgit:git-patch-id[1] | 
 |  | 
 | GIT | 
 | --- | 
 | Part of the linkgit:git[1] suite |