Man page - git-cherry(1)
Packages contains this manual
- git-stash(1)
- gitcredentials(7)
- git-write-tree(1)
- git(1)
- git-mergetool--lib(1)
- git-tag(1)
- git-for-each-repo(1)
- git-upload-archive(1)
- git-credential-cache--daemon(1)
- git-count-objects(1)
- git-for-each-ref(1)
- git-merge-tree(1)
- git-fmt-merge-msg(1)
- git-update-ref(1)
- git-read-tree(1)
- git-init-db(1)
- git-restore(1)
- git-checkout-index(1)
- git-upload-pack(1)
- gittutorial-2(7)
- git-fast-export(1)
- git-verify-pack(1)
- git-remote(1)
- git-fsck(1)
- git-mailinfo(1)
- git-rerere(1)
- gitremote-helpers(7)
- git-log(1)
- git-rm(1)
- git-hash-object(1)
- git-fsmonitor--daemon(1)
- git-branch(1)
- git-check-ignore(1)
- git-request-pull(1)
- git-show(1)
- git-clone(1)
- git-init(1)
- gitglossary(7)
- git-index-pack(1)
- gitprotocol-http(5)
- git-mailsplit(1)
- git-patch-id(1)
- git-check-attr(1)
- git-diff-tree(1)
- git-unpack-objects(1)
- git-multi-pack-index(1)
- git-sh-setup(1)
- git-check-mailmap(1)
- git-revert(1)
- git-stripspace(1)
- git-commit-graph(1)
- gitformat-index(5)
- git-credential-store(1)
- gitnamespaces(7)
- gitformat-commit-graph(5)
- git-mv(1)
- git-diff-index(1)
- git-show-branch(1)
- gitrevisions(7)
- gitweb(1)
- git-imap-send(1)
- git-cat-file(1)
- githooks(5)
- git-subtree(1)
- git-merge-one-file(1)
- gitcore-tutorial(7)
- git-mktag(1)
- git-maintenance(1)
- gitprotocol-capabilities(5)
- git-quiltimport(1)
- git-status(1)
- git-help(1)
- gitmailmap(5)
- git-column(1)
- gitcli(7)
- git-fetch(1)
- git-var(1)
- git-prune(1)
- scalar(1)
- git-notes(1)
- git-symbolic-ref(1)
- git-bugreport(1)
- git-cherry-pick(1)
- git-difftool(1)
- gitworkflows(7)
- git-http-push(1)
- git-filter-branch(1)
- git-pack-objects(1)
- git-update-index(1)
- git-diff(1)
- git-credential(1)
- git-clean(1)
- gitprotocol-common(5)
- git-ls-tree(1)
- git-web--browse(1)
- gitcvs-migration(7)
- git-interpret-trailers(1)
- git-http-fetch(1)
- git-prune-packed(1)
- git-verify-commit(1)
- git-update-server-info(1)
- git-archive(1)
- git-rebase(1)
- git-pull(1)
- git-mktree(1)
- git-http-backend(1)
- gitattributes(5)
- git-repack(1)
- gittutorial(7)
- gitformat-signature(5)
- gitpacking(7)
- giteveryday(7)
- git-show-ref(1)
- git-format-patch(1)
- gitprotocol-pack(5)
- git-replay(1)
- git-fast-import(1)
- git-merge-base(1)
- git-merge-file(1)
- git-instaweb(1)
- git-diff-files(1)
- git-receive-pack(1)
- git-remote-fd(1)
- git-rev-list(1)
- git-sh-i18n(1)
- git-send-pack(1)
- gitmodules(5)
- git-range-diff(1)
- git-merge-index(1)
- git-get-tar-commit-id(1)
- git-ls-files(1)
- git-sparse-checkout(1)
- git-mergetool(1)
- git-replace(1)
- git-merge(1)
- gitignore(5)
- git-whatchanged(1)
- gitweb.conf(5)
- git-verify-tag(1)
- git-pack-refs(1)
- git-reset(1)
- gitrepository-layout(5)
- git-commit-tree(1)
- git-pack-redundant(1)
- gitformat-bundle(5)
- git-submodule(1)
- git-reflog(1)
- git-show-index(1)
- git-push(1)
- git-shortlog(1)
- git-gc(1)
- git-worktree(1)
- git-refs(1)
- git-bundle(1)
- git-hook(1)
- git-sh-i18n--envsubst(1)
- gitfaq(7)
- git-commit(1)
- git-check-ref-format(1)
- git-bisect(1)
- git-fsck-objects(1)
- git-daemon(1)
- git-cherry(1)
- git-ls-remote(1)
- git-blame(1)
- git-stage(1)
- git-name-rev(1)
- git-describe(1)
- git-remote-ext(1)
- git-diagnose(1)
- gitformat-pack(5)
- git-add(1)
- git-shell(1)
- git-unpack-file(1)
- git-apply(1)
- git-am(1)
- gitformat-chunk(5)
- git-annotate(1)
- git-checkout(1)
- git-fetch-pack(1)
- gitdiffcore(7)
- git-config(1)
- git-version(1)
- gitsubmodules(7)
- git-grep(1)
- git-credential-cache(1)
- gitprotocol-v2(5)
- git-rev-parse(1)
- git-switch(1)
apt-get install git-man
Manual
GIT-CHERRY
NAMESYNOPSIS
DESCRIPTION
OPTIONS
EXAMPLES
Patch workflows
Concrete example
Using a limit
SEE ALSO
GIT
NAME
git-cherry - Find commits yet to be applied to upstream
SYNOPSIS
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 git-cherry-pick (1), git-am (1) or 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 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
git-patch-id (1)
GIT
Part of the git (1) suite