blob: b290b617d4a59ee2ae6b62f2eebd9e86f71c4802 [file] [log] [blame]
Junio C Hamano78e3a782010-07-15 22:24:451SPECIFYING REVISIONS
2--------------------
3
Junio C Hamanoee3adc32011-04-06 19:53:384A revision parameter '<rev>' typically, but not necessarily, names a
5commit object. It uses what is called an 'extended SHA1'
Junio C Hamano78e3a782010-07-15 22:24:456syntax. Here are various ways to spell object names. The
Junio C Hamanoee3adc32011-04-06 19:53:387ones listed near the end of this list name trees and
Junio C Hamano78e3a782010-07-15 22:24:458blobs contained in a commit.
9
Junio C Hamanoee3adc32011-04-06 19:53:3810'<sha1>', e.g. 'dae86e1950b1277e545cee180551750029cfe735', 'dae86e'::
11 The full SHA1 object name (40-byte hexadecimal string), or
12 a leading substring that is unique within the repository.
Junio C Hamano78e3a782010-07-15 22:24:4513 E.g. dae86e1950b1277e545cee180551750029cfe735 and dae86e both
Junio C Hamanoee3adc32011-04-06 19:53:3814 name the same commit object if there is no other object in
Junio C Hamano78e3a782010-07-15 22:24:4515 your repository whose object name starts with dae86e.
16
Junio C Hamanoee3adc32011-04-06 19:53:3817'<describeOutput>', e.g. 'v1.7.4.2-679-g3bee7fb'::
18 Output from `git describe`; i.e. a closest tag, optionally
Junio C Hamano78e3a782010-07-15 22:24:4519 followed by a dash and a number of commits, followed by a dash, a
Junio C Hamanoee3adc32011-04-06 19:53:3820 'g', and an abbreviated object name.
Junio C Hamano78e3a782010-07-15 22:24:4521
Junio C Hamanoee3adc32011-04-06 19:53:3822'<refname>', e.g. 'master', 'heads/master', 'refs/heads/master'::
23 A symbolic ref name. E.g. 'master' typically means the commit
24 object referenced by 'refs/heads/master'. If you
25 happen to have both 'heads/master' and 'tags/master', you can
Junio C Hamano78e3a782010-07-15 22:24:4526 explicitly say 'heads/master' to tell git which one you mean.
Junio C Hamanoee3adc32011-04-06 19:53:3827 When ambiguous, a '<name>' is disambiguated by taking the
Junio C Hamano78e3a782010-07-15 22:24:4528 first match in the following rules:
29
Junio C Hamanoee3adc32011-04-06 19:53:3830 . If '$GIT_DIR/<name>' exists, that is what you mean (this is usually
31 useful only for 'HEAD', 'FETCH_HEAD', 'ORIG_HEAD', 'MERGE_HEAD'
32 and 'CHERRY_PICK_HEAD');
Junio C Hamano78e3a782010-07-15 22:24:4533
Junio C Hamanoee3adc32011-04-06 19:53:3834 . otherwise, 'refs/<name>' if it exists;
Junio C Hamano78e3a782010-07-15 22:24:4535
Junio C Hamanoee3adc32011-04-06 19:53:3836 . otherwise, 'refs/tags/<refname>' if it exists;
Junio C Hamano78e3a782010-07-15 22:24:4537
Junio C Hamanoee3adc32011-04-06 19:53:3838 . otherwise, 'refs/heads/<name>' if it exists;
Junio C Hamano78e3a782010-07-15 22:24:4539
Junio C Hamanoee3adc32011-04-06 19:53:3840 . otherwise, 'refs/remotes/<name>' if it exists;
Junio C Hamano78e3a782010-07-15 22:24:4541
Junio C Hamanoee3adc32011-04-06 19:53:3842 . otherwise, 'refs/remotes/<name>/HEAD' if it exists.
Junio C Hamano78e3a782010-07-15 22:24:4543+
Junio C Hamanoee3adc32011-04-06 19:53:3844'HEAD' names the commit on which you based the changes in the working tree.
45'FETCH_HEAD' records the branch which you fetched from a remote repository
46with your last `git fetch` invocation.
47'ORIG_HEAD' is created by commands that move your 'HEAD' in a drastic
48way, to record the position of the 'HEAD' before their operation, so that
49you can easily change the tip of the branch back to the state before you ran
50them.
51'MERGE_HEAD' records the commit(s) which you are merging into your branch
52when you run `git merge`.
53'CHERRY_PICK_HEAD' records the commit which you are cherry-picking
54when you run `git cherry-pick`.
Junio C Hamano78e3a782010-07-15 22:24:4555+
Junio C Hamanoee3adc32011-04-06 19:53:3856Note that any of the 'refs/*' cases above may come either from
57the '$GIT_DIR/refs' directory or from the '$GIT_DIR/packed-refs' file.
Junio C Hamano78e3a782010-07-15 22:24:4558
Junio C Hamanoee3adc32011-04-06 19:53:3859'<refname>@\{<date>\}', e.g. 'master@\{yesterday\}', 'HEAD@\{5 minutes ago\}'::
60 A ref followed by the suffix '@' with a date specification
Junio C Hamano78e3a782010-07-15 22:24:4561 enclosed in a brace
62 pair (e.g. '\{yesterday\}', '\{1 month 2 weeks 3 days 1 hour 1
Junio C Hamanoee3adc32011-04-06 19:53:3863 second ago\}' or '\{1979-02-26 18:30:00\}') specifies the value
Junio C Hamano78e3a782010-07-15 22:24:4564 of the ref at a prior point in time. This suffix may only be
65 used immediately following a ref name and the ref must have an
Junio C Hamanoee3adc32011-04-06 19:53:3866 existing log ('$GIT_DIR/logs/<ref>'). Note that this looks up the state
Junio C Hamano78e3a782010-07-15 22:24:4567 of your *local* ref at a given time; e.g., what was in your local
Junio C Hamanoee3adc32011-04-06 19:53:3868 'master' branch last week. If you want to look at commits made during
69 certain times, see '--since' and '--until'.
Junio C Hamano78e3a782010-07-15 22:24:4570
Junio C Hamanoee3adc32011-04-06 19:53:3871'<refname>@\{<n>\}', e.g. 'master@\{1\}'::
72 A ref followed by the suffix '@' with an ordinal specification
73 enclosed in a brace pair (e.g. '\{1\}', '\{15\}') specifies
Junio C Hamano78e3a782010-07-15 22:24:4574 the n-th prior value of that ref. For example 'master@\{1\}'
75 is the immediate prior value of 'master' while 'master@\{5\}'
76 is the 5th prior value of 'master'. This suffix may only be used
77 immediately following a ref name and the ref must have an existing
Junio C Hamanoee3adc32011-04-06 19:53:3878 log ('$GIT_DIR/logs/<refname>').
Junio C Hamano78e3a782010-07-15 22:24:4579
Junio C Hamanoee3adc32011-04-06 19:53:3880'@\{<n>\}', e.g. '@\{1\}'::
81 You can use the '@' construct with an empty ref part to get at a
82 reflog entry of the current branch. For example, if you are on
83 branch 'blabla' then '@\{1\}' means the same as 'blabla@\{1\}'.
Junio C Hamano78e3a782010-07-15 22:24:4584
Junio C Hamanoee3adc32011-04-06 19:53:3885'@\{-<n>\}', e.g. '@\{-1\}'::
86 The construct '@\{-<n>\}' means the <n>th branch checked out
Junio C Hamano78e3a782010-07-15 22:24:4587 before the current one.
88
Junio C Hamanoee3adc32011-04-06 19:53:3889'<refname>@\{upstream\}', e.g. 'master@\{upstream\}', '@\{u\}'::
90 The suffix '@\{upstream\}' to a ref (short form '<refname>@\{u\}') refers to
91 the branch the ref is set to build on top of. A missing ref defaults
Junio C Hamano78e3a782010-07-15 22:24:4592 to the current branch.
93
Junio C Hamanoee3adc32011-04-06 19:53:3894'<rev>{caret}', e.g. 'HEAD{caret}, v1.5.1{caret}0'::
95 A suffix '{caret}' to a revision parameter means the first parent of
Junio C Hamano78e3a782010-07-15 22:24:4596 that commit object. '{caret}<n>' means the <n>th parent (i.e.
Junio C Hamanoee3adc32011-04-06 19:53:3897 '<rev>{caret}'
98 is equivalent to '<rev>{caret}1'). As a special rule,
99 '<rev>{caret}0' means the commit itself and is used when '<rev>' is the
Junio C Hamano78e3a782010-07-15 22:24:45100 object name of a tag object that refers to a commit object.
101
Junio C Hamanoee3adc32011-04-06 19:53:38102'<rev>{tilde}<n>', e.g. 'master{tilde}3'::
103 A suffix '{tilde}<n>' to a revision parameter means the commit
Junio C Hamano78e3a782010-07-15 22:24:45104 object that is the <n>th generation grand-parent of the named
Junio C Hamanoee3adc32011-04-06 19:53:38105 commit object, following only the first parents. I.e. '<rev>{tilde}3' is
106 equivalent to '<rev>{caret}{caret}{caret}' which is equivalent to
107 '<rev>{caret}1{caret}1{caret}1'. See below for an illustration of
Junio C Hamano78e3a782010-07-15 22:24:45108 the usage of this form.
109
Junio C Hamanoee3adc32011-04-06 19:53:38110'<rev>{caret}\{<type>\}', e.g. 'v0.99.8{caret}\{commit\}'::
111 A suffix '{caret}' followed by an object type name enclosed in
112 brace pair means the object
Junio C Hamano78e3a782010-07-15 22:24:45113 could be a tag, and dereference the tag recursively until an
114 object of that type is found or the object cannot be
Junio C Hamanoee3adc32011-04-06 19:53:38115 dereferenced anymore (in which case, barf). '<rev>{caret}0'
116 is a short-hand for '<rev>{caret}\{commit\}'.
Junio C Hamano78e3a782010-07-15 22:24:45117
Junio C Hamanoee3adc32011-04-06 19:53:38118'<rev>{caret}\{\}', e.g. 'v0.99.8{caret}\{\}'::
119 A suffix '{caret}' followed by an empty brace pair
120 means the object could be a tag,
Junio C Hamano78e3a782010-07-15 22:24:45121 and dereference the tag recursively until a non-tag object is
122 found.
123
Junio C Hamanoee3adc32011-04-06 19:53:38124'<rev>{caret}\{/<text>\}', e.g. 'HEAD^{/fix nasty bug}'::
125 A suffix '{caret}' to a revision parameter, followed by a brace
126 pair that contains a text led by a slash,
127 is the same as the ':/fix nasty bug' syntax below except that
Junio C Hamano18b5ad52010-12-22 01:57:50128 it returns the youngest matching commit which is reachable from
Junio C Hamanoee3adc32011-04-06 19:53:38129 the '<rev>' before '{caret}'.
Junio C Hamano18b5ad52010-12-22 01:57:50130
Junio C Hamanoee3adc32011-04-06 19:53:38131':/<text>', e.g. ':/fix nasty bug'::
132 A colon, followed by a slash, followed by a text, names
Junio C Hamano442206c2010-09-28 05:51:23133 a commit whose commit message matches the specified regular expression.
Junio C Hamano78e3a782010-07-15 22:24:45134 This name returns the youngest matching commit which is
135 reachable from any ref. If the commit message starts with a
Junio C Hamanoee3adc32011-04-06 19:53:38136 '!' you have to repeat that; the special sequence ':/!',
137 followed by something else than '!', is reserved for now.
Junio C Hamano442206c2010-09-28 05:51:23138 The regular expression can match any part of the commit message. To
Junio C Hamanoee3adc32011-04-06 19:53:38139 match messages starting with a string, one can use e.g. ':/^foo'.
Junio C Hamano78e3a782010-07-15 22:24:45140
Junio C Hamanoee3adc32011-04-06 19:53:38141'<rev>:<path>', e.g. 'HEAD:README', ':README', 'master:./README'::
142 A suffix ':' followed by a path names the blob or tree
Junio C Hamano78e3a782010-07-15 22:24:45143 at the given path in the tree-ish object named by the part
144 before the colon.
Junio C Hamanoee3adc32011-04-06 19:53:38145 ':path' (with an empty part before the colon)
Junio C Hamano78e3a782010-07-15 22:24:45146 is a special case of the syntax described next: content
147 recorded in the index at the given path.
Junio C Hamanoee3adc32011-04-06 19:53:38148 A path starting with './' or '../' is relative to the current working directory.
149 The given path will be converted to be relative to the working tree's root directory.
Junio C Hamano0d75e872010-12-17 06:57:26150 This is most useful to address a blob or tree from a commit or tree that has
Junio C Hamanoee3adc32011-04-06 19:53:38151 the same tree structure as the working tree.
Junio C Hamano78e3a782010-07-15 22:24:45152
Junio C Hamanoee3adc32011-04-06 19:53:38153':<n>:<path>', e.g. ':0:README', ':README'::
154 A colon, optionally followed by a stage number (0 to 3) and a
155 colon, followed by a path, names a blob object in the
156 index at the given path. A missing stage number (and the colon
157 that follows it) names a stage 0 entry. During a merge, stage
Junio C Hamano78e3a782010-07-15 22:24:45158 1 is the common ancestor, stage 2 is the target branch's version
159 (typically the current branch), and stage 3 is the version from
Junio C Hamanoee3adc32011-04-06 19:53:38160 the branch which is being merged.
Junio C Hamano78e3a782010-07-15 22:24:45161
162Here is an illustration, by Jon Loeliger. Both commit nodes B
163and C are parents of commit node A. Parent commits are ordered
164left-to-right.
165
166........................................
167G H I J
168 \ / \ /
169 D E F
170 \ | / \
171 \ | / |
172 \|/ |
173 B C
174 \ /
175 \ /
176 A
177........................................
178
179 A = = A^0
180 B = A^ = A^1 = A~1
181 C = A^2 = A^2
182 D = A^^ = A^1^1 = A~2
183 E = B^2 = A^^2
184 F = B^3 = A^^3
185 G = A^^^ = A^1^1^1 = A~3
186 H = D^2 = B^^2 = A^^^2 = A~2^2
187 I = F^ = B^3^ = A^^3^
188 J = F^2 = B^3^2 = A^^3^2
189
190
191SPECIFYING RANGES
192-----------------
193
Junio C Hamanoee3adc32011-04-06 19:53:38194History traversing commands such as `git log` operate on a set
Junio C Hamano78e3a782010-07-15 22:24:45195of commits, not just a single commit. To these commands,
196specifying a single revision with the notation described in the
197previous section means the set of commits reachable from that
198commit, following the commit ancestry chain.
199
Junio C Hamanoee3adc32011-04-06 19:53:38200To exclude commits reachable from a commit, a prefix '{caret}'
201notation is used. E.g. '{caret}r1 r2' means commits reachable
202from 'r2' but exclude the ones reachable from 'r1'.
Junio C Hamano78e3a782010-07-15 22:24:45203
204This set operation appears so often that there is a shorthand
Junio C Hamanoee3adc32011-04-06 19:53:38205for it. When you have two commits 'r1' and 'r2' (named according
Junio C Hamano78e3a782010-07-15 22:24:45206to the syntax explained in SPECIFYING REVISIONS above), you can ask
207for commits that are reachable from r2 excluding those that are reachable
Junio C Hamanoee3adc32011-04-06 19:53:38208from r1 by '{caret}r1 r2' and it can be written as 'r1..r2'.
Junio C Hamano78e3a782010-07-15 22:24:45209
Junio C Hamanoee3adc32011-04-06 19:53:38210A similar notation 'r1\...r2' is called symmetric difference
211of 'r1' and 'r2' and is defined as
212'r1 r2 --not $(git merge-base --all r1 r2)'.
Junio C Hamano78e3a782010-07-15 22:24:45213It is the set of commits that are reachable from either one of
Junio C Hamanoee3adc32011-04-06 19:53:38214'r1' or 'r2' but not from both.
Junio C Hamano78e3a782010-07-15 22:24:45215
216Two other shorthands for naming a set that is formed by a commit
Junio C Hamanoee3adc32011-04-06 19:53:38217and its parent commits exist. The 'r1{caret}@' notation means all
218parents of 'r1'. 'r1{caret}!' includes commit 'r1' but excludes
Junio C Hamano78e3a782010-07-15 22:24:45219all of its parents.
220
221Here are a handful of examples:
222
223 D G H D
224 D F G H I J D F
225 ^G D H D
226 ^D B E I J F B
227 B...C G H D E B C
228 ^D B C E I J F B C
229 C^@ I J F
230 F^! D G H D F