You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
145 lines
3.5 KiB
145 lines
3.5 KiB
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
|
|
|