]> git.ipfire.org Git - thirdparty/git.git/blame - Documentation/git-cherry.txt
t4034: abstract away SHA-1-specific constants
[thirdparty/git.git] / Documentation / git-cherry.txt
CommitLineData
7fc9d69f
JH
1git-cherry(1)
2=============
3
4NAME
5----
7c801fbc 6git-cherry - Find commits yet to be applied to upstream
7fc9d69f
JH
7
8SYNOPSIS
9--------
7791a1d9 10[verse]
3bc52d7a 11'git cherry' [-v] [<upstream> [<head> [<limit>]]]
7fc9d69f
JH
12
13DESCRIPTION
14-----------
7c801fbc
TR
15Determine whether there are commits in `<head>..<upstream>` that are
16equivalent to those in the range `<limit>..<head>`.
81ae43cd 17
7c801fbc
TR
18The equivalence test is based on the diff, after removing whitespace
19and line numbers. git-cherry therefore detects when commits have been
20"copied" by means of linkgit:git-cherry-pick[1], linkgit:git-am[1] or
21linkgit:git-rebase[1].
81ae43cd 22
7c801fbc
TR
23Outputs the SHA1 of every commit in `<limit>..<head>`, prefixed with
24`-` for commits that have an equivalent in <upstream>, and `+` for
25commits that do not.
7fc9d69f
JH
26
27OPTIONS
28-------
52a22d1e 29-v::
7c801fbc 30 Show the commit subjects next to the SHA1s.
7fc9d69f 31
52a22d1e 32<upstream>::
7c801fbc
TR
33 Upstream branch to search for equivalent commits.
34 Defaults to the upstream branch of HEAD.
7fc9d69f 35
52a22d1e
LAS
36<head>::
37 Working branch; defaults to HEAD.
7fc9d69f 38
6894f49f
LFC
39<limit>::
40 Do not report commits up to (and including) limit.
41
7c801fbc
TR
42EXAMPLES
43--------
44
45Patch workflows
46~~~~~~~~~~~~~~~
47
48git-cherry is frequently used in patch-based workflows (see
49linkgit:gitworkflows[7]) to determine if a series of patches has been
50applied by the upstream maintainer. In such a workflow you might
51create and send a topic branch like this:
52
53------------
54$ git checkout -b topic origin/master
55# work and create some commits
56$ git format-patch origin/master
57$ git send-email ... 00*
58------------
59
60Later, you can see whether your changes have been applied by saying
61(still on `topic`):
62
63------------
64$ git fetch # update your notion of origin/master
65$ git cherry -v
66------------
67
68Concrete example
69~~~~~~~~~~~~~~~~
70
71In a situation where topic consisted of three commits, and the
72maintainer applied two of them, the situation might look like:
73
74------------
75$ git log --graph --oneline --decorate --boundary origin/master...topic
76* 7654321 (origin/master) upstream tip commit
77[... snip some other commits ...]
78* cccc111 cherry-pick of C
79* aaaa111 cherry-pick of A
80[... snip a lot more that has happened ...]
81| * cccc000 (topic) commit C
82| * bbbb000 commit B
83| * aaaa000 commit A
84|/
85o 1234567 branch point
86------------
87
88In such cases, git-cherry shows a concise summary of what has yet to
89be applied:
90
91------------
92$ git cherry origin/master topic
93- cccc000... commit C
94+ bbbb000... commit B
95- aaaa000... commit A
96------------
97
98Here, we see that the commits A and C (marked with `-`) can be
99dropped from your `topic` branch when you rebase it on top of
100`origin/master`, while the commit B (marked with `+`) still needs to
101be kept so that it will be sent to be applied to `origin/master`.
102
103
104Using a limit
105~~~~~~~~~~~~~
106
107The optional <limit> is useful in cases where your topic is based on
108other work that is not in upstream. Expanding on the previous
109example, this might look like:
110
111------------
112$ git log --graph --oneline --decorate --boundary origin/master...topic
113* 7654321 (origin/master) upstream tip commit
114[... snip some other commits ...]
115* cccc111 cherry-pick of C
116* aaaa111 cherry-pick of A
117[... snip a lot more that has happened ...]
118| * cccc000 (topic) commit C
119| * bbbb000 commit B
120| * aaaa000 commit A
121| * 0000fff (base) unpublished stuff F
122[... snip ...]
123| * 0000aaa unpublished stuff A
124|/
125o 1234567 merge-base between upstream and topic
126------------
127
128By specifying `base` as the limit, you can avoid listing commits
129between `base` and `topic`:
130
131------------
132$ git cherry origin/master topic base
133- cccc000... commit C
134+ bbbb000... commit B
135- aaaa000... commit A
136------------
137
138
a7052d35
JH
139SEE ALSO
140--------
141linkgit:git-patch-id[1]
142
7fc9d69f
JH
143GIT
144---
9e1f0a85 145Part of the linkgit:git[1] suite