Autogenerated HTML docs for v2.42.0-241-g6bdb5
[git-htmldocs.git] / git-for-each-ref.txt
blob11b2bc3121626d047b415f805e98b380be0ef1e4
1 git-for-each-ref(1)
2 ===================
4 NAME
5 ----
6 git-for-each-ref - Output information on each ref
8 SYNOPSIS
9 --------
10 [verse]
11 'git for-each-ref' [--count=<count>] [--shell|--perl|--python|--tcl]
12                    [(--sort=<key>)...] [--format=<format>]
13                    [ --stdin | <pattern>... ]
14                    [--points-at=<object>]
15                    [--merged[=<object>]] [--no-merged[=<object>]]
16                    [--contains[=<object>]] [--no-contains[=<object>]]
17                    [--exclude=<pattern> ...]
19 DESCRIPTION
20 -----------
22 Iterate over all refs that match `<pattern>` and show them
23 according to the given `<format>`, after sorting them according
24 to the given set of `<key>`.  If `<count>` is given, stop after
25 showing that many refs.  The interpolated values in `<format>`
26 can optionally be quoted as string literals in the specified
27 host language allowing their direct evaluation in that language.
29 OPTIONS
30 -------
31 <pattern>...::
32         If one or more patterns are given, only refs are shown that
33         match against at least one pattern, either using fnmatch(3) or
34         literally, in the latter case matching completely or from the
35         beginning up to a slash.
37 --stdin::
38         If `--stdin` is supplied, then the list of patterns is read from
39         standard input instead of from the argument list.
41 --count=<count>::
42         By default the command shows all refs that match
43         `<pattern>`.  This option makes it stop after showing
44         that many refs.
46 --sort=<key>::
47         A field name to sort on.  Prefix `-` to sort in
48         descending order of the value.  When unspecified,
49         `refname` is used.  You may use the --sort=<key> option
50         multiple times, in which case the last key becomes the primary
51         key.
53 --format=<format>::
54         A string that interpolates `%(fieldname)` from a ref being shown
55         and the object it points at.  If `fieldname`
56         is prefixed with an asterisk (`*`) and the ref points
57         at a tag object, use the value for the field in the object
58         which the tag object refers to (instead of the field in the tag object).
59         When unspecified, `<format>` defaults to
60         `%(objectname) SPC %(objecttype) TAB %(refname)`.
61         It also interpolates `%%` to `%`, and `%xx` where `xx`
62         are hex digits interpolates to character with hex code
63         `xx`; for example `%00` interpolates to `\0` (NUL),
64         `%09` to `\t` (TAB) and `%0a` to `\n` (LF).
66 --color[=<when>]::
67         Respect any colors specified in the `--format` option. The
68         `<when>` field must be one of `always`, `never`, or `auto` (if
69         `<when>` is absent, behave as if `always` was given).
71 --shell::
72 --perl::
73 --python::
74 --tcl::
75         If given, strings that substitute `%(fieldname)`
76         placeholders are quoted as string literals suitable for
77         the specified host language.  This is meant to produce
78         a scriptlet that can directly be `eval`ed.
80 --points-at=<object>::
81         Only list refs which points at the given object.
83 --merged[=<object>]::
84         Only list refs whose tips are reachable from the
85         specified commit (HEAD if not specified).
87 --no-merged[=<object>]::
88         Only list refs whose tips are not reachable from the
89         specified commit (HEAD if not specified).
91 --contains[=<object>]::
92         Only list refs which contain the specified commit (HEAD if not
93         specified).
95 --no-contains[=<object>]::
96         Only list refs which don't contain the specified commit (HEAD
97         if not specified).
99 --ignore-case::
100         Sorting and filtering refs are case insensitive.
102 --omit-empty::
103         Do not print a newline after formatted refs where the format expands
104         to the empty string.
106 --exclude=<pattern>::
107         If one or more patterns are given, only refs which do not match
108         any excluded pattern(s) are shown. Matching is done using the
109         same rules as `<pattern>` above.
111 FIELD NAMES
112 -----------
114 Various values from structured fields in referenced objects can
115 be used to interpolate into the resulting output, or as sort
116 keys.
118 For all objects, the following names can be used:
120 refname::
121         The name of the ref (the part after $GIT_DIR/).
122         For a non-ambiguous short name of the ref append `:short`.
123         The option core.warnAmbiguousRefs is used to select the strict
124         abbreviation mode. If `lstrip=<N>` (`rstrip=<N>`) is appended, strips `<N>`
125         slash-separated path components from the front (back) of the refname
126         (e.g. `%(refname:lstrip=2)` turns `refs/tags/foo` into `foo` and
127         `%(refname:rstrip=2)` turns `refs/tags/foo` into `refs`).
128         If `<N>` is a negative number, strip as many path components as
129         necessary from the specified end to leave `-<N>` path components
130         (e.g. `%(refname:lstrip=-2)` turns
131         `refs/tags/foo` into `tags/foo` and `%(refname:rstrip=-1)`
132         turns `refs/tags/foo` into `refs`). When the ref does not have
133         enough components, the result becomes an empty string if
134         stripping with positive <N>, or it becomes the full refname if
135         stripping with negative <N>.  Neither is an error.
137 `strip` can be used as a synonym to `lstrip`.
139 objecttype::
140         The type of the object (`blob`, `tree`, `commit`, `tag`).
142 objectsize::
143         The size of the object (the same as 'git cat-file -s' reports).
144         Append `:disk` to get the size, in bytes, that the object takes up on
145         disk. See the note about on-disk sizes in the `CAVEATS` section below.
146 objectname::
147         The object name (aka SHA-1).
148         For a non-ambiguous abbreviation of the object name append `:short`.
149         For an abbreviation of the object name with desired length append
150         `:short=<length>`, where the minimum length is MINIMUM_ABBREV. The
151         length may be exceeded to ensure unique object names.
152 deltabase::
153         This expands to the object name of the delta base for the
154         given object, if it is stored as a delta.  Otherwise it
155         expands to the null object name (all zeroes).
157 upstream::
158         The name of a local ref which can be considered ``upstream''
159         from the displayed ref. Respects `:short`, `:lstrip` and
160         `:rstrip` in the same way as `refname` above.  Additionally
161         respects `:track` to show "[ahead N, behind M]" and
162         `:trackshort` to show the terse version: ">" (ahead), "<"
163         (behind), "<>" (ahead and behind), or "=" (in sync). `:track`
164         also prints "[gone]" whenever unknown upstream ref is
165         encountered. Append `:track,nobracket` to show tracking
166         information without brackets (i.e "ahead N, behind M").
168 For any remote-tracking branch `%(upstream)`, `%(upstream:remotename)`
169 and `%(upstream:remoteref)` refer to the name of the remote and the
170 name of the tracked remote ref, respectively. In other words, the
171 remote-tracking branch can be updated explicitly and individually by
172 using the refspec `%(upstream:remoteref):%(upstream)` to fetch from
173 `%(upstream:remotename)`.
175 Has no effect if the ref does not have tracking information associated
176 with it.  All the options apart from `nobracket` are mutually exclusive,
177 but if used together the last option is selected.
179 push::
180         The name of a local ref which represents the `@{push}`
181         location for the displayed ref. Respects `:short`, `:lstrip`,
182         `:rstrip`, `:track`, `:trackshort`, `:remotename`, and `:remoteref`
183         options as `upstream` does. Produces an empty string if no `@{push}`
184         ref is configured.
186 HEAD::
187         '*' if HEAD matches current ref (the checked out branch), ' '
188         otherwise.
190 color::
191         Change output color. Followed by `:<colorname>`, where color
192         names are described under Values in the "CONFIGURATION FILE"
193         section of linkgit:git-config[1].  For example,
194         `%(color:bold red)`.
196 align::
197         Left-, middle-, or right-align the content between
198         %(align:...) and %(end). The "align:" is followed by
199         `width=<width>` and `position=<position>` in any order
200         separated by a comma, where the `<position>` is either left,
201         right or middle, default being left and `<width>` is the total
202         length of the content with alignment. For brevity, the
203         "width=" and/or "position=" prefixes may be omitted, and bare
204         <width> and <position> used instead.  For instance,
205         `%(align:<width>,<position>)`. If the contents length is more
206         than the width then no alignment is performed. If used with
207         `--quote` everything in between %(align:...) and %(end) is
208         quoted, but if nested then only the topmost level performs
209         quoting.
211 if::
212         Used as %(if)...%(then)...%(end) or
213         %(if)...%(then)...%(else)...%(end).  If there is an atom with
214         value or string literal after the %(if) then everything after
215         the %(then) is printed, else if the %(else) atom is used, then
216         everything after %(else) is printed. We ignore space when
217         evaluating the string before %(then), this is useful when we
218         use the %(HEAD) atom which prints either "*" or " " and we
219         want to apply the 'if' condition only on the 'HEAD' ref.
220         Append ":equals=<string>" or ":notequals=<string>" to compare
221         the value between the %(if:...) and %(then) atoms with the
222         given string.
224 symref::
225         The ref which the given symbolic ref refers to. If not a
226         symbolic ref, nothing is printed. Respects the `:short`,
227         `:lstrip` and `:rstrip` options in the same way as `refname`
228         above.
230 signature::
231         The GPG signature of a commit.
233 signature:grade::
234         Show "G" for a good (valid) signature, "B" for a bad
235         signature, "U" for a good signature with unknown validity, "X"
236         for a good signature that has expired, "Y" for a good
237         signature made by an expired key, "R" for a good signature
238         made by a revoked key, "E" if the signature cannot be
239         checked (e.g. missing key) and "N" for no signature.
241 signature:signer::
242         The signer of the GPG signature of a commit.
244 signature:key::
245         The key of the GPG signature of a commit.
247 signature:fingerprint::
248         The fingerprint of the GPG signature of a commit.
250 signature:primarykeyfingerprint::
251         The primary key fingerprint of the GPG signature of a commit.
253 signature:trustlevel::
254         The trust level of the GPG signature of a commit. Possible
255         outputs are `ultimate`, `fully`, `marginal`, `never` and `undefined`.
257 worktreepath::
258         The absolute path to the worktree in which the ref is checked
259         out, if it is checked out in any linked worktree. Empty string
260         otherwise.
262 ahead-behind:<committish>::
263         Two integers, separated by a space, demonstrating the number of
264         commits ahead and behind, respectively, when comparing the output
265         ref to the `<committish>` specified in the format.
267 describe[:options]::
268         A human-readable name, like linkgit:git-describe[1];
269         empty string for undescribable commits. The `describe` string may
270         be followed by a colon and one or more comma-separated options.
273 tags=<bool-value>;;
274         Instead of only considering annotated tags, consider
275         lightweight tags as well; see the corresponding option in
276         linkgit:git-describe[1] for details.
277 abbrev=<number>;;
278         Use at least <number> hexadecimal digits; see the corresponding
279         option in linkgit:git-describe[1] for details.
280 match=<pattern>;;
281         Only consider tags matching the given `glob(7)` pattern,
282         excluding the "refs/tags/" prefix; see the corresponding option
283         in linkgit:git-describe[1] for details.
284 exclude=<pattern>;;
285         Do not consider tags matching the given `glob(7)` pattern,
286         excluding the "refs/tags/" prefix; see the corresponding option
287         in linkgit:git-describe[1] for details.
290 In addition to the above, for commit and tag objects, the header
291 field names (`tree`, `parent`, `object`, `type`, and `tag`) can
292 be used to specify the value in the header field.
293 Fields `tree` and `parent` can also be used with modifier `:short` and
294 `:short=<length>` just like `objectname`.
296 For commit and tag objects, the special `creatordate` and `creator`
297 fields will correspond to the appropriate date or name-email-date tuple
298 from the `committer` or `tagger` fields depending on the object type.
299 These are intended for working on a mix of annotated and lightweight tags.
301 Fields that have name-email-date tuple as its value (`author`,
302 `committer`, and `tagger`) can be suffixed with `name`, `email`,
303 and `date` to extract the named component.  For email fields (`authoremail`,
304 `committeremail` and `taggeremail`), `:trim` can be appended to get the email
305 without angle brackets, and `:localpart` to get the part before the `@` symbol
306 out of the trimmed email.
308 The raw data in an object is `raw`.
310 raw:size::
311         The raw data size of the object.
313 Note that `--format=%(raw)` can not be used with `--python`, `--shell`, `--tcl`,
314 because such language may not support arbitrary binary data in their string
315 variable type.
317 The message in a commit or a tag object is `contents`, from which
318 `contents:<part>` can be used to extract various parts out of:
320 contents:size::
321         The size in bytes of the commit or tag message.
323 contents:subject::
324         The first paragraph of the message, which typically is a
325         single line, is taken as the "subject" of the commit or the
326         tag message.
327         Instead of `contents:subject`, field `subject` can also be used to
328         obtain same results. `:sanitize` can be appended to `subject` for
329         subject line suitable for filename.
331 contents:body::
332         The remainder of the commit or the tag message that follows
333         the "subject".
335 contents:signature::
336         The optional GPG signature of the tag.
338 contents:lines=N::
339         The first `N` lines of the message.
341 Additionally, the trailers as interpreted by linkgit:git-interpret-trailers[1]
342 are obtained as `trailers[:options]` (or by using the historical alias
343 `contents:trailers[:options]`). For valid [:option] values see `trailers`
344 section of linkgit:git-log[1].
346 For sorting purposes, fields with numeric values sort in numeric order
347 (`objectsize`, `authordate`, `committerdate`, `creatordate`, `taggerdate`).
348 All other fields are used to sort in their byte-value order.
350 There is also an option to sort by versions, this can be done by using
351 the fieldname `version:refname` or its alias `v:refname`.
353 In any case, a field name that refers to a field inapplicable to
354 the object referred by the ref does not cause an error.  It
355 returns an empty string instead.
357 As a special case for the date-type fields, you may specify a format for
358 the date by adding `:` followed by date format name (see the
359 values the `--date` option to linkgit:git-rev-list[1] takes).
361 Some atoms like %(align) and %(if) always require a matching %(end).
362 We call them "opening atoms" and sometimes denote them as %($open).
364 When a scripting language specific quoting is in effect, everything
365 between a top-level opening atom and its matching %(end) is evaluated
366 according to the semantics of the opening atom and only its result
367 from the top-level is quoted.
370 EXAMPLES
371 --------
373 An example directly producing formatted text.  Show the most recent
374 3 tagged commits:
376 ------------
377 #!/bin/sh
379 git for-each-ref --count=3 --sort='-*authordate' \
380 --format='From: %(*authorname) %(*authoremail)
381 Subject: %(*subject)
382 Date: %(*authordate)
383 Ref: %(*refname)
385 %(*body)
386 ' 'refs/tags'
387 ------------
390 A simple example showing the use of shell eval on the output,
391 demonstrating the use of --shell.  List the prefixes of all heads:
392 ------------
393 #!/bin/sh
395 git for-each-ref --shell --format="ref=%(refname)" refs/heads | \
396 while read entry
398         eval "$entry"
399         echo `dirname $ref`
400 done
401 ------------
404 A bit more elaborate report on tags, demonstrating that the format
405 may be an entire script:
406 ------------
407 #!/bin/sh
409 fmt='
410         r=%(refname)
411         t=%(*objecttype)
412         T=${r#refs/tags/}
414         o=%(*objectname)
415         n=%(*authorname)
416         e=%(*authoremail)
417         s=%(*subject)
418         d=%(*authordate)
419         b=%(*body)
421         kind=Tag
422         if test "z$t" = z
423         then
424                 # could be a lightweight tag
425                 t=%(objecttype)
426                 kind="Lightweight tag"
427                 o=%(objectname)
428                 n=%(authorname)
429                 e=%(authoremail)
430                 s=%(subject)
431                 d=%(authordate)
432                 b=%(body)
433         fi
434         echo "$kind $T points at a $t object $o"
435         if test "z$t" = zcommit
436         then
437                 echo "The commit was authored by $n $e
438 at $d, and titled
440     $s
442 Its message reads as:
444                 echo "$b" | sed -e "s/^/    /"
445                 echo
446         fi
449 eval=`git for-each-ref --shell --format="$fmt" \
450         --sort='*objecttype' \
451         --sort=-taggerdate \
452         refs/tags`
453 eval "$eval"
454 ------------
457 An example to show the usage of %(if)...%(then)...%(else)...%(end).
458 This prefixes the current branch with a star.
460 ------------
461 git for-each-ref --format="%(if)%(HEAD)%(then)* %(else)  %(end)%(refname:short)" refs/heads/
462 ------------
465 An example to show the usage of %(if)...%(then)...%(end).
466 This prints the authorname, if present.
468 ------------
469 git for-each-ref --format="%(refname)%(if)%(authorname)%(then) Authored by: %(authorname)%(end)"
470 ------------
472 CAVEATS
473 -------
475 Note that the sizes of objects on disk are reported accurately, but care
476 should be taken in drawing conclusions about which refs or objects are
477 responsible for disk usage. The size of a packed non-delta object may be
478 much larger than the size of objects which delta against it, but the
479 choice of which object is the base and which is the delta is arbitrary
480 and is subject to change during a repack.
482 Note also that multiple copies of an object may be present in the object
483 database; in this case, it is undefined which copy's size or delta base
484 will be reported.
486 NOTES
487 -----
489 include::ref-reachability-filters.txt[]
491 SEE ALSO
492 --------
493 linkgit:git-show-ref[1]
497 Part of the linkgit:git[1] suite