]> git.ipfire.org Git - thirdparty/git.git/blame - Documentation/revisions.txt
The seventh batch
[thirdparty/git.git] / Documentation / revisions.txt
CommitLineData
5a8f3117
MG
1SPECIFYING REVISIONS
2--------------------
3
61e508d9 4A revision parameter '<rev>' typically, but not necessarily, names a
d5fa1f1a 5commit object. It uses what is called an 'extended SHA-1'
5a8f3117 6syntax. Here are various ways to spell object names. The
b62c7697 7ones listed near the end of this list name trees and
5a8f3117
MG
8blobs contained in a commit.
9
88184c1f
AH
10NOTE: This document shows the "raw" syntax as seen by git. The shell
11and other UIs might require additional quoting to protect special
12characters and to avoid word splitting.
13
61e508d9 14'<sha1>', e.g. 'dae86e1950b1277e545cee180551750029cfe735', 'dae86e'::
d5fa1f1a 15 The full SHA-1 object name (40-byte hexadecimal string), or
b62c7697 16 a leading substring that is unique within the repository.
5a8f3117 17 E.g. dae86e1950b1277e545cee180551750029cfe735 and dae86e both
b62c7697 18 name the same commit object if there is no other object in
5a8f3117
MG
19 your repository whose object name starts with dae86e.
20
61e508d9 21'<describeOutput>', e.g. 'v1.7.4.2-679-g3bee7fb'::
b62c7697 22 Output from `git describe`; i.e. a closest tag, optionally
5a8f3117 23 followed by a dash and a number of commits, followed by a dash, a
83456b13 24 'g', and an abbreviated object name.
5a8f3117 25
61e508d9
MG
26'<refname>', e.g. 'master', 'heads/master', 'refs/heads/master'::
27 A symbolic ref name. E.g. 'master' typically means the commit
83456b13
MG
28 object referenced by 'refs/heads/master'. If you
29 happen to have both 'heads/master' and 'tags/master', you can
2de9b711 30 explicitly say 'heads/master' to tell Git which one you mean.
89ce391b 31 When ambiguous, a '<refname>' is disambiguated by taking the
5a8f3117 32 first match in the following rules:
bc11bac3 33+
89ce391b 34 . If '$GIT_DIR/<refname>' exists, that is what you mean (this is usually
6ec5f460 35 useful only for `HEAD`, `FETCH_HEAD`, `ORIG_HEAD`, `MERGE_HEAD`,
4fa1edb9
PB
36 `REBASE_HEAD`, `REVERT_HEAD`, `CHERRY_PICK_HEAD`, `BISECT_HEAD`
37 and `AUTO_MERGE`);
5a8f3117 38
89ce391b 39 . otherwise, 'refs/<refname>' if it exists;
5a8f3117 40
b62c7697 41 . otherwise, 'refs/tags/<refname>' if it exists;
5a8f3117 42
89ce391b 43 . otherwise, 'refs/heads/<refname>' if it exists;
5a8f3117 44
89ce391b 45 . otherwise, 'refs/remotes/<refname>' if it exists;
5a8f3117 46
89ce391b 47 . otherwise, 'refs/remotes/<refname>/HEAD' if it exists.
bc11bac3 48
5a8f3117 49+
bc11bac3
PB
50 `HEAD`:::
51 names the commit on which you based the changes in the working tree.
52 `FETCH_HEAD`:::
53 records the branch which you fetched from a remote repository with
54 your last `git fetch` invocation.
55 `ORIG_HEAD`:::
56 is created by commands that move your `HEAD` in a drastic way (`git
57 am`, `git merge`, `git rebase`, `git reset`), to record the position
58 of the `HEAD` before their operation, so that you can easily change
59 the tip of the branch back to the state before you ran them.
60 `MERGE_HEAD`:::
61 records the commit(s) which you are merging into your branch when you
62 run `git merge`.
6ec5f460
PB
63 `REBASE_HEAD`:::
64 during a rebase, records the commit at which the operation is
65 currently stopped, either because of conflicts or an `edit` command in
66 an interactive rebase.
67 `REVERT_HEAD`:::
68 records the commit which you are reverting when you run `git revert`.
bc11bac3
PB
69 `CHERRY_PICK_HEAD`:::
70 records the commit which you are cherry-picking when you run `git
71 cherry-pick`.
6ec5f460
PB
72 `BISECT_HEAD`:::
73 records the current commit to be tested when you run `git bisect
74 --no-checkout`.
4fa1edb9
PB
75 `AUTO_MERGE`:::
76 records a tree object corresponding to the state the
77 'ort' merge strategy wrote to the working tree when a merge operation
78 resulted in conflicts.
bc11bac3 79
5a8f3117 80+
83456b13 81Note that any of the 'refs/*' cases above may come either from
68ed71b5 82the `$GIT_DIR/refs` directory or from the `$GIT_DIR/packed-refs` file.
e1c3bf49 83While the ref name encoding is unspecified, UTF-8 is preferred as
1452bd64 84some output processing may assume ref names in UTF-8.
5a8f3117 85
9ba89f48 86'@'::
661c3e9b 87 '@' alone is a shortcut for `HEAD`.
9ba89f48 88
d86d2074 89'[<refname>]@{<date>}', e.g. 'master@\{yesterday\}', 'HEAD@{5 minutes ago}'::
61e508d9 90 A ref followed by the suffix '@' with a date specification
5a8f3117 91 enclosed in a brace
c200deb8
MK
92 pair (e.g. '\{yesterday\}', '{1 month 2 weeks 3 days 1 hour 1
93 second ago}' or '{1979-02-26 18:30:00}') specifies the value
5a8f3117
MG
94 of the ref at a prior point in time. This suffix may only be
95 used immediately following a ref name and the ref must have an
83456b13 96 existing log ('$GIT_DIR/logs/<ref>'). Note that this looks up the state
5a8f3117 97 of your *local* ref at a given time; e.g., what was in your local
83456b13 98 'master' branch last week. If you want to look at commits made during
bcf9626a 99 certain times, see `--since` and `--until`.
5a8f3117 100
c200deb8 101'<refname>@{<n>}', e.g. 'master@\{1\}'::
61e508d9 102 A ref followed by the suffix '@' with an ordinal specification
b62c7697 103 enclosed in a brace pair (e.g. '\{1\}', '\{15\}') specifies
5a8f3117
MG
104 the n-th prior value of that ref. For example 'master@\{1\}'
105 is the immediate prior value of 'master' while 'master@\{5\}'
106 is the 5th prior value of 'master'. This suffix may only be used
107 immediately following a ref name and the ref must have an existing
61e508d9 108 log ('$GIT_DIR/logs/<refname>').
5a8f3117 109
c200deb8 110'@{<n>}', e.g. '@\{1\}'::
61e508d9 111 You can use the '@' construct with an empty ref part to get at a
b62c7697
MG
112 reflog entry of the current branch. For example, if you are on
113 branch 'blabla' then '@\{1\}' means the same as 'blabla@\{1\}'.
5a8f3117 114
c200deb8
MK
115'@{-<n>}', e.g. '@{-1}'::
116 The construct '@{-<n>}' means the <n>th branch/commit checked out
5a8f3117
MG
117 before the current one.
118
d86d2074 119'[<branchname>]@\{upstream\}', e.g. 'master@\{upstream\}', '@\{u\}'::
8cdab69d
TK
120 A branch B may be set up to build on top of a branch X (configured with
121 `branch.<name>.merge`) at a remote R (configured with
122 `branch.<name>.remote`). B@{u} refers to the remote-tracking branch for
123 the branch X taken from remote R, typically found at `refs/remotes/R/X`.
5a8f3117 124
d86d2074 125'[<branchname>]@\{push\}', e.g. 'master@\{push\}', '@\{push\}'::
adfe5d04
JK
126 The suffix '@\{push}' reports the branch "where we would push to" if
127 `git push` were run while `branchname` was checked out (or the current
8cdab69d
TK
128 `HEAD` if no branchname is specified). Like for '@\{upstream\}', we report
129 the remote-tracking branch that corresponds to that branch at the remote.
adfe5d04
JK
130+
131Here's an example to make it more clear:
132+
133------------------------------
134$ git config push.default current
135$ git config remote.pushdefault myfork
328c6cb8 136$ git switch -c mybranch origin/master
adfe5d04
JK
137
138$ git rev-parse --symbolic-full-name @{upstream}
139refs/remotes/origin/master
140
141$ git rev-parse --symbolic-full-name @{push}
142refs/remotes/myfork/mybranch
143------------------------------
144+
145Note in the example that we set up a triangular workflow, where we pull
146from one location and push to another. In a non-triangular workflow,
147'@\{push}' is the same as '@\{upstream}', and there is no need for it.
244ea1b5
ÆAB
148+
149This suffix is also accepted when spelled in uppercase, and means the same
150thing no matter the case.
adfe5d04 151
d86d2074 152'<rev>{caret}[<n>]', e.g. 'HEAD{caret}, v1.5.1{caret}0'::
61e508d9 153 A suffix '{caret}' to a revision parameter means the first parent of
5a8f3117 154 that commit object. '{caret}<n>' means the <n>th parent (i.e.
61e508d9
MG
155 '<rev>{caret}'
156 is equivalent to '<rev>{caret}1'). As a special rule,
157 '<rev>{caret}0' means the commit itself and is used when '<rev>' is the
5a8f3117
MG
158 object name of a tag object that refers to a commit object.
159
6a12e99a
DL
160'<rev>{tilde}[<n>]', e.g. 'HEAD{tilde}, master{tilde}3'::
161 A suffix '{tilde}' to a revision parameter means the first parent of
162 that commit object.
61e508d9 163 A suffix '{tilde}<n>' to a revision parameter means the commit
70eb1307 164 object that is the <n>th generation ancestor of the named
b62c7697 165 commit object, following only the first parents. I.e. '<rev>{tilde}3' is
61e508d9 166 equivalent to '<rev>{caret}{caret}{caret}' which is equivalent to
b62c7697 167 '<rev>{caret}1{caret}1{caret}1'. See below for an illustration of
5a8f3117
MG
168 the usage of this form.
169
c200deb8 170'<rev>{caret}{<type>}', e.g. 'v0.99.8{caret}\{commit\}'::
61e508d9 171 A suffix '{caret}' followed by an object type name enclosed in
abdb54a1
RH
172 brace pair means dereference the object at '<rev>' recursively until
173 an object of type '<type>' is found or the object cannot be
174 dereferenced anymore (in which case, barf).
175 For example, if '<rev>' is a commit-ish, '<rev>{caret}\{commit\}'
176 describes the corresponding commit object.
177 Similarly, if '<rev>' is a tree-ish, '<rev>{caret}\{tree\}'
178 describes the corresponding tree object.
179 '<rev>{caret}0'
b62c7697 180 is a short-hand for '<rev>{caret}\{commit\}'.
a6a3f2cc 181+
e277ff43
DL
182'<rev>{caret}\{object\}' can be used to make sure '<rev>' names an
183object that exists, without requiring '<rev>' to be a tag, and
184without dereferencing '<rev>'; because a tag is already an object,
a6a3f2cc 185it does not have to be dereferenced even once to get to an object.
75aa26d3 186+
e277ff43 187'<rev>{caret}\{tag\}' can be used to ensure that '<rev>' identifies an
75aa26d3 188existing tag object.
5a8f3117 189
c200deb8 190'<rev>{caret}{}', e.g. 'v0.99.8{caret}{}'::
61e508d9
MG
191 A suffix '{caret}' followed by an empty brace pair
192 means the object could be a tag,
5a8f3117
MG
193 and dereference the tag recursively until a non-tag object is
194 found.
195
c200deb8 196'<rev>{caret}{/<text>}', e.g. 'HEAD^{/fix nasty bug}'::
61e508d9
MG
197 A suffix '{caret}' to a revision parameter, followed by a brace
198 pair that contains a text led by a slash,
b62c7697 199 is the same as the ':/fix nasty bug' syntax below except that
32574b68 200 it returns the youngest matching commit which is reachable from
61e508d9 201 the '<rev>' before '{caret}'.
32574b68 202
61e508d9
MG
203':/<text>', e.g. ':/fix nasty bug'::
204 A colon, followed by a slash, followed by a text, names
95ad6d2d 205 a commit whose commit message matches the specified regular expression.
5a8f3117 206 This name returns the youngest matching commit which is
6b3351e7
WC
207 reachable from any ref, including HEAD.
208 The regular expression can match any part of the
0769854f
WP
209 commit message. To match messages starting with a string, one can use
210 e.g. ':/^foo'. The special sequence ':/!' is reserved for modifiers to what
211 is matched. ':/!-foo' performs a negative match, while ':/!!foo' matches a
212 literal '!' character, followed by 'foo'. Any other sequence beginning with
213 ':/!' is reserved for now.
88184c1f
AH
214 Depending on the given text, the shell's word splitting rules might
215 require additional quoting.
5a8f3117 216
4ad1b2c7 217'<rev>:<path>', e.g. 'HEAD:README', 'master:./README'::
61e508d9 218 A suffix ':' followed by a path names the blob or tree
5a8f3117
MG
219 at the given path in the tree-ish object named by the part
220 before the colon.
b62c7697
MG
221 A path starting with './' or '../' is relative to the current working directory.
222 The given path will be converted to be relative to the working tree's root directory.
979f7929 223 This is most useful to address a blob or tree from a commit or tree that has
b62c7697 224 the same tree structure as the working tree.
5a8f3117 225
4ad1b2c7 226':[<n>:]<path>', e.g. ':0:README', ':README'::
61e508d9
MG
227 A colon, optionally followed by a stage number (0 to 3) and a
228 colon, followed by a path, names a blob object in the
b62c7697 229 index at the given path. A missing stage number (and the colon
61e508d9 230 that follows it) names a stage 0 entry. During a merge, stage
5a8f3117
MG
231 1 is the common ancestor, stage 2 is the target branch's version
232 (typically the current branch), and stage 3 is the version from
b62c7697 233 the branch which is being merged.
5a8f3117
MG
234
235Here is an illustration, by Jon Loeliger. Both commit nodes B
236and C are parents of commit node A. Parent commits are ordered
237left-to-right.
238
239........................................
240G H I J
241 \ / \ /
242 D E F
243 \ | / \
244 \ | / |
245 \|/ |
246 B C
247 \ /
248 \ /
249 A
250........................................
251
252 A = = A^0
253 B = A^ = A^1 = A~1
39102cf4 254 C = = A^2
5a8f3117
MG
255 D = A^^ = A^1^1 = A~2
256 E = B^2 = A^^2
257 F = B^3 = A^^3
258 G = A^^^ = A^1^1^1 = A~3
259 H = D^2 = B^^2 = A^^^2 = A~2^2
260 I = F^ = B^3^ = A^^3^
261 J = F^2 = B^3^2 = A^^3^2
262
263
264SPECIFYING RANGES
265-----------------
266
83456b13 267History traversing commands such as `git log` operate on a set
0b451248
PO
268of commits, not just a single commit.
269
270For these commands,
271specifying a single revision, using the notation described in the
272previous section, means the set of commits `reachable` from the given
273commit.
274
f5d9e91e
PB
275Specifying several revisions means the set of commits reachable from
276any of the given commits.
277
0b451248
PO
278A commit's reachable set is the commit itself and the commits in
279its ancestry chain.
280
f302c1e4
JH
281There are several notations to specify a set of connected commits
282(called a "revision range"), illustrated below.
283
5a8f3117 284
391a3c70
PO
285Commit Exclusions
286~~~~~~~~~~~~~~~~~
287
288'{caret}<rev>' (caret) Notation::
289 To exclude commits reachable from a commit, a prefix '{caret}'
290 notation is used. E.g. '{caret}r1 r2' means commits reachable
1afe13b9
PO
291 from 'r2' but exclude the ones reachable from 'r1' (i.e. 'r1' and
292 its ancestors).
391a3c70
PO
293
294Dotted Range Notations
295~~~~~~~~~~~~~~~~~~~~~~
296
297The '..' (two-dot) Range Notation::
298 The '{caret}r1 r2' set operation appears so often that there is a shorthand
299 for it. When you have two commits 'r1' and 'r2' (named according
300 to the syntax explained in SPECIFYING REVISIONS above), you can ask
301 for commits that are reachable from r2 excluding those that are reachable
302 from r1 by '{caret}r1 r2' and it can be written as 'r1..r2'.
303
5fd9d173 304The '\...' (three-dot) Symmetric Difference Notation::
391a3c70
PO
305 A similar notation 'r1\...r2' is called symmetric difference
306 of 'r1' and 'r2' and is defined as
307 'r1 r2 --not $(git merge-base --all r1 r2)'.
308 It is the set of commits that are reachable from either one of
309 'r1' (left side) or 'r2' (right side) but not from both.
310
311In these two shorthand notations, you can omit one end and let it default to HEAD.
003c84f6
JH
312For example, 'origin..' is a shorthand for 'origin..HEAD' and asks "What
313did I do since I forked from the origin branch?" Similarly, '..origin'
314is a shorthand for 'HEAD..origin' and asks "What did the origin do since
315I forked from them?" Note that '..' would mean 'HEAD..HEAD' which is an
316empty range that is both reachable and unreachable from HEAD.
317
f302c1e4
JH
318Commands that are specifically designed to take two distinct ranges
319(e.g. "git range-diff R1 R2" to compare two ranges) do exist, but
320they are exceptions. Unless otherwise noted, all "git" commands
321that operate on a set of commits work on a single revision range.
322In other words, writing two "two-dot range notation" next to each
323other, e.g.
324
325 $ git log A..B C..D
326
327does *not* specify two revision ranges for most commands. Instead
328it will name a single connected set of commits, i.e. those that are
329reachable from either B or D but are reachable from neither A or C.
330In a linear history like this:
331
332 ---A---B---o---o---C---D
333
334because A and B are reachable from C, the revision range specified
335by these two dotted ranges is a single commit D.
336
337
391a3c70
PO
338Other <rev>{caret} Parent Shorthand Notations
339~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
8779351d 340Three other shorthands exist, particularly useful for merge commits,
391a3c70 341for naming a set that is formed by a commit and its parent commits.
5a8f3117 342
391a3c70
PO
343The 'r1{caret}@' notation means all parents of 'r1'.
344
59841a39
PO
345The 'r1{caret}!' notation includes commit 'r1' but excludes all of its parents.
346By itself, this notation denotes the single commit 'r1'.
391a3c70 347
d86d2074 348The '<rev>{caret}-[<n>]' notation includes '<rev>' but excludes the <n>th
8779351d
VN
349parent (i.e. a shorthand for '<rev>{caret}<n>..<rev>'), with '<n>' = 1 if
350not given. This is typically useful for merge commits where you
351can just pass '<commit>{caret}-' to get all the commits in the branch
352that was merged in merge commit '<commit>' (including '<commit>'
353itself).
354
39b4d85e 355While '<rev>{caret}<n>' was about specifying a single commit parent, these
8779351d 356three notations also consider its parents. For example you can say
39b4d85e 357'HEAD{caret}2{caret}@', however you cannot say 'HEAD{caret}@{caret}2'.
5a8f3117 358
391a3c70
PO
359Revision Range Summary
360----------------------
ca5ee2d1
JH
361
362'<rev>'::
1afe13b9
PO
363 Include commits that are reachable from <rev> (i.e. <rev> and its
364 ancestors).
ca5ee2d1
JH
365
366'{caret}<rev>'::
1afe13b9
PO
367 Exclude commits that are reachable from <rev> (i.e. <rev> and its
368 ancestors).
ca5ee2d1
JH
369
370'<rev1>..<rev2>'::
371 Include commits that are reachable from <rev2> but exclude
3a4dc486 372 those that are reachable from <rev1>. When either <rev1> or
661c3e9b 373 <rev2> is omitted, it defaults to `HEAD`.
ca5ee2d1
JH
374
375'<rev1>\...<rev2>'::
376 Include commits that are reachable from either <rev1> or
3a4dc486 377 <rev2> but exclude those that are reachable from both. When
661c3e9b 378 either <rev1> or <rev2> is omitted, it defaults to `HEAD`.
ca5ee2d1
JH
379
380'<rev>{caret}@', e.g. 'HEAD{caret}@'::
381 A suffix '{caret}' followed by an at sign is the same as listing
382 all parents of '<rev>' (meaning, include anything reachable from
383 its parents, but not the commit itself).
384
385'<rev>{caret}!', e.g. 'HEAD{caret}!'::
386 A suffix '{caret}' followed by an exclamation mark is the same
9f91da75 387 as giving commit '<rev>' and all its parents prefixed with
ca5ee2d1
JH
388 '{caret}' to exclude them (and their ancestors).
389
733e064d 390'<rev>{caret}-<n>', e.g. 'HEAD{caret}-, HEAD{caret}-2'::
8779351d
VN
391 Equivalent to '<rev>{caret}<n>..<rev>', with '<n>' = 1 if not
392 given.
393
7a5370e6
PO
394Here are a handful of examples using the Loeliger illustration above,
395with each step in the notation's expansion and selection carefully
396spelt out:
5a8f3117 397
37980505 398....
7a5370e6 399 Args Expanded arguments Selected commits
a117be4d
PO
400 D G H D
401 D F G H I J D F
402 ^G D H D
403 ^D B E I J F B
404 ^D B C E I J F B C
405 C I J F C
7a5370e6
PO
406 B..C = ^B C C
407 B...C = B ^F C G H D E B C
8779351d
VN
408 B^- = B^..B
409 = ^B^1 B E I J F B
7a5370e6
PO
410 C^@ = C^1
411 = F I J F
412 B^@ = B^1 B^2 B^3
413 = D E F D G H E F I J
414 C^! = C ^C^@
415 = C ^C^1
416 = C ^F C
417 B^! = B ^B^@
418 = B ^B^1 ^B^2 ^B^3
419 = B ^D ^E ^F B
420 F^! D = F ^I ^J D G H D F
37980505 421....