]> git.ipfire.org Git - thirdparty/git.git/blob - Documentation/revisions.txt
The sixth batch
[thirdparty/git.git] / Documentation / revisions.txt
1 SPECIFYING REVISIONS
2 --------------------
3
4 A revision parameter '<rev>' typically, but not necessarily, names a
5 commit object. It uses what is called an 'extended SHA-1'
6 syntax. Here are various ways to spell object names. The
7 ones listed near the end of this list name trees and
8 blobs contained in a commit.
9
10 NOTE: This document shows the "raw" syntax as seen by git. The shell
11 and other UIs might require additional quoting to protect special
12 characters and to avoid word splitting.
13
14 '<sha1>', e.g. 'dae86e1950b1277e545cee180551750029cfe735', 'dae86e'::
15 The full SHA-1 object name (40-byte hexadecimal string), or
16 a leading substring that is unique within the repository.
17 E.g. dae86e1950b1277e545cee180551750029cfe735 and dae86e both
18 name the same commit object if there is no other object in
19 your repository whose object name starts with dae86e.
20
21 '<describeOutput>', e.g. 'v1.7.4.2-679-g3bee7fb'::
22 Output from `git describe`; i.e. a closest tag, optionally
23 followed by a dash and a number of commits, followed by a dash, a
24 'g', and an abbreviated object name.
25
26 '<refname>', e.g. 'master', 'heads/master', 'refs/heads/master'::
27 A symbolic ref name. E.g. 'master' typically means the commit
28 object referenced by 'refs/heads/master'. If you
29 happen to have both 'heads/master' and 'tags/master', you can
30 explicitly say 'heads/master' to tell Git which one you mean.
31 When ambiguous, a '<refname>' is disambiguated by taking the
32 first match in the following rules:
33 +
34 . If '$GIT_DIR/<refname>' exists, that is what you mean (this is usually
35 useful only for `HEAD`, `FETCH_HEAD`, `ORIG_HEAD`, `MERGE_HEAD`,
36 `REBASE_HEAD`, `REVERT_HEAD`, `CHERRY_PICK_HEAD`, `BISECT_HEAD`
37 and `AUTO_MERGE`);
38
39 . otherwise, 'refs/<refname>' if it exists;
40
41 . otherwise, 'refs/tags/<refname>' if it exists;
42
43 . otherwise, 'refs/heads/<refname>' if it exists;
44
45 . otherwise, 'refs/remotes/<refname>' if it exists;
46
47 . otherwise, 'refs/remotes/<refname>/HEAD' if it exists.
48
49 +
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`.
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`.
69 `CHERRY_PICK_HEAD`:::
70 records the commit which you are cherry-picking when you run `git
71 cherry-pick`.
72 `BISECT_HEAD`:::
73 records the current commit to be tested when you run `git bisect
74 --no-checkout`.
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.
79
80 +
81 Note that any of the 'refs/*' cases above may come either from
82 the `$GIT_DIR/refs` directory or from the `$GIT_DIR/packed-refs` file.
83 While the ref name encoding is unspecified, UTF-8 is preferred as
84 some output processing may assume ref names in UTF-8.
85
86 '@'::
87 '@' alone is a shortcut for `HEAD`.
88
89 '[<refname>]@{<date>}', e.g. 'master@\{yesterday\}', 'HEAD@{5 minutes ago}'::
90 A ref followed by the suffix '@' with a date specification
91 enclosed in a brace
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
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
96 existing log ('$GIT_DIR/logs/<ref>'). Note that this looks up the state
97 of your *local* ref at a given time; e.g., what was in your local
98 'master' branch last week. If you want to look at commits made during
99 certain times, see `--since` and `--until`.
100
101 '<refname>@{<n>}', e.g. 'master@\{1\}'::
102 A ref followed by the suffix '@' with an ordinal specification
103 enclosed in a brace pair (e.g. '\{1\}', '\{15\}') specifies
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
108 log ('$GIT_DIR/logs/<refname>').
109
110 '@{<n>}', e.g. '@\{1\}'::
111 You can use the '@' construct with an empty ref part to get at a
112 reflog entry of the current branch. For example, if you are on
113 branch 'blabla' then '@\{1\}' means the same as 'blabla@\{1\}'.
114
115 '@{-<n>}', e.g. '@{-1}'::
116 The construct '@{-<n>}' means the <n>th branch/commit checked out
117 before the current one.
118
119 '[<branchname>]@\{upstream\}', e.g. 'master@\{upstream\}', '@\{u\}'::
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`.
124
125 '[<branchname>]@\{push\}', e.g. 'master@\{push\}', '@\{push\}'::
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
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.
130 +
131 Here's an example to make it more clear:
132 +
133 ------------------------------
134 $ git config push.default current
135 $ git config remote.pushdefault myfork
136 $ git switch -c mybranch origin/master
137
138 $ git rev-parse --symbolic-full-name @{upstream}
139 refs/remotes/origin/master
140
141 $ git rev-parse --symbolic-full-name @{push}
142 refs/remotes/myfork/mybranch
143 ------------------------------
144 +
145 Note in the example that we set up a triangular workflow, where we pull
146 from 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.
148 +
149 This suffix is also accepted when spelled in uppercase, and means the same
150 thing no matter the case.
151
152 '<rev>{caret}[<n>]', e.g. 'HEAD{caret}, v1.5.1{caret}0'::
153 A suffix '{caret}' to a revision parameter means the first parent of
154 that commit object. '{caret}<n>' means the <n>th parent (i.e.
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
158 object name of a tag object that refers to a commit object.
159
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.
163 A suffix '{tilde}<n>' to a revision parameter means the commit
164 object that is the <n>th generation ancestor of the named
165 commit object, following only the first parents. I.e. '<rev>{tilde}3' is
166 equivalent to '<rev>{caret}{caret}{caret}' which is equivalent to
167 '<rev>{caret}1{caret}1{caret}1'. See below for an illustration of
168 the usage of this form.
169
170 '<rev>{caret}{<type>}', e.g. 'v0.99.8{caret}\{commit\}'::
171 A suffix '{caret}' followed by an object type name enclosed in
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'
180 is a short-hand for '<rev>{caret}\{commit\}'.
181 +
182 '<rev>{caret}\{object\}' can be used to make sure '<rev>' names an
183 object that exists, without requiring '<rev>' to be a tag, and
184 without dereferencing '<rev>'; because a tag is already an object,
185 it does not have to be dereferenced even once to get to an object.
186 +
187 '<rev>{caret}\{tag\}' can be used to ensure that '<rev>' identifies an
188 existing tag object.
189
190 '<rev>{caret}{}', e.g. 'v0.99.8{caret}{}'::
191 A suffix '{caret}' followed by an empty brace pair
192 means the object could be a tag,
193 and dereference the tag recursively until a non-tag object is
194 found.
195
196 '<rev>{caret}{/<text>}', e.g. 'HEAD^{/fix nasty bug}'::
197 A suffix '{caret}' to a revision parameter, followed by a brace
198 pair that contains a text led by a slash,
199 is the same as the ':/fix nasty bug' syntax below except that
200 it returns the youngest matching commit which is reachable from
201 the '<rev>' before '{caret}'.
202
203 ':/<text>', e.g. ':/fix nasty bug'::
204 A colon, followed by a slash, followed by a text, names
205 a commit whose commit message matches the specified regular expression.
206 This name returns the youngest matching commit which is
207 reachable from any ref, including HEAD.
208 The regular expression can match any part of the
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.
214 Depending on the given text, the shell's word splitting rules might
215 require additional quoting.
216
217 '<rev>:<path>', e.g. 'HEAD:README', 'master:./README'::
218 A suffix ':' followed by a path names the blob or tree
219 at the given path in the tree-ish object named by the part
220 before the colon.
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.
223 This is most useful to address a blob or tree from a commit or tree that has
224 the same tree structure as the working tree.
225
226 ':[<n>:]<path>', e.g. ':0:README', ':README'::
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
229 index at the given path. A missing stage number (and the colon
230 that follows it) names a stage 0 entry. During a merge, stage
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
233 the branch which is being merged.
234
235 Here is an illustration, by Jon Loeliger. Both commit nodes B
236 and C are parents of commit node A. Parent commits are ordered
237 left-to-right.
238
239 ........................................
240 G 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
254 C = = A^2
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
264 SPECIFYING RANGES
265 -----------------
266
267 History traversing commands such as `git log` operate on a set
268 of commits, not just a single commit.
269
270 For these commands,
271 specifying a single revision, using the notation described in the
272 previous section, means the set of commits `reachable` from the given
273 commit.
274
275 Specifying several revisions means the set of commits reachable from
276 any of the given commits.
277
278 A commit's reachable set is the commit itself and the commits in
279 its ancestry chain.
280
281 There are several notations to specify a set of connected commits
282 (called a "revision range"), illustrated below.
283
284
285 Commit 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
291 from 'r2' but exclude the ones reachable from 'r1' (i.e. 'r1' and
292 its ancestors).
293
294 Dotted Range Notations
295 ~~~~~~~~~~~~~~~~~~~~~~
296
297 The '..' (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
304 The '\...' (three-dot) Symmetric Difference Notation::
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
311 In these two shorthand notations, you can omit one end and let it default to HEAD.
312 For example, 'origin..' is a shorthand for 'origin..HEAD' and asks "What
313 did I do since I forked from the origin branch?" Similarly, '..origin'
314 is a shorthand for 'HEAD..origin' and asks "What did the origin do since
315 I forked from them?" Note that '..' would mean 'HEAD..HEAD' which is an
316 empty range that is both reachable and unreachable from HEAD.
317
318 Commands that are specifically designed to take two distinct ranges
319 (e.g. "git range-diff R1 R2" to compare two ranges) do exist, but
320 they are exceptions. Unless otherwise noted, all "git" commands
321 that operate on a set of commits work on a single revision range.
322 In other words, writing two "two-dot range notation" next to each
323 other, e.g.
324
325 $ git log A..B C..D
326
327 does *not* specify two revision ranges for most commands. Instead
328 it will name a single connected set of commits, i.e. those that are
329 reachable from either B or D but are reachable from neither A or C.
330 In a linear history like this:
331
332 ---A---B---o---o---C---D
333
334 because A and B are reachable from C, the revision range specified
335 by these two dotted ranges is a single commit D.
336
337
338 Other <rev>{caret} Parent Shorthand Notations
339 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
340 Three other shorthands exist, particularly useful for merge commits,
341 for naming a set that is formed by a commit and its parent commits.
342
343 The 'r1{caret}@' notation means all parents of 'r1'.
344
345 The 'r1{caret}!' notation includes commit 'r1' but excludes all of its parents.
346 By itself, this notation denotes the single commit 'r1'.
347
348 The '<rev>{caret}-[<n>]' notation includes '<rev>' but excludes the <n>th
349 parent (i.e. a shorthand for '<rev>{caret}<n>..<rev>'), with '<n>' = 1 if
350 not given. This is typically useful for merge commits where you
351 can just pass '<commit>{caret}-' to get all the commits in the branch
352 that was merged in merge commit '<commit>' (including '<commit>'
353 itself).
354
355 While '<rev>{caret}<n>' was about specifying a single commit parent, these
356 three notations also consider its parents. For example you can say
357 'HEAD{caret}2{caret}@', however you cannot say 'HEAD{caret}@{caret}2'.
358
359 Revision Range Summary
360 ----------------------
361
362 '<rev>'::
363 Include commits that are reachable from <rev> (i.e. <rev> and its
364 ancestors).
365
366 '{caret}<rev>'::
367 Exclude commits that are reachable from <rev> (i.e. <rev> and its
368 ancestors).
369
370 '<rev1>..<rev2>'::
371 Include commits that are reachable from <rev2> but exclude
372 those that are reachable from <rev1>. When either <rev1> or
373 <rev2> is omitted, it defaults to `HEAD`.
374
375 '<rev1>\...<rev2>'::
376 Include commits that are reachable from either <rev1> or
377 <rev2> but exclude those that are reachable from both. When
378 either <rev1> or <rev2> is omitted, it defaults to `HEAD`.
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
387 as giving commit '<rev>' and all its parents prefixed with
388 '{caret}' to exclude them (and their ancestors).
389
390 '<rev>{caret}-<n>', e.g. 'HEAD{caret}-, HEAD{caret}-2'::
391 Equivalent to '<rev>{caret}<n>..<rev>', with '<n>' = 1 if not
392 given.
393
394 Here are a handful of examples using the Loeliger illustration above,
395 with each step in the notation's expansion and selection carefully
396 spelt out:
397
398 ....
399 Args Expanded arguments Selected commits
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
406 B..C = ^B C C
407 B...C = B ^F C G H D E B C
408 B^- = B^..B
409 = ^B^1 B E I J F B
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
421 ....