]> git.ipfire.org Git - thirdparty/git.git/blame - Documentation/git-for-each-ref.txt
for-each-ref: add '--contains' option
[thirdparty/git.git] / Documentation / git-for-each-ref.txt
CommitLineData
9f613ddd
JH
1git-for-each-ref(1)
2===================
3
4NAME
5----
6git-for-each-ref - Output information on each ref
7
8SYNOPSIS
9--------
97925fde 10[verse]
b1889c36 11'git for-each-ref' [--count=<count>] [--shell|--perl|--python|--tcl]
0adda936 12 [(--sort=<key>)...] [--format=<format>] [<pattern>...]
7c328348 13 [--points-at <object>] [(--merged | --no-merged) [<object>]]
4a71109a 14 [--contains [<object>]]
9f613ddd
JH
15
16DESCRIPTION
17-----------
18
19Iterate over all refs that match `<pattern>` and show them
20according to the given `<format>`, after sorting them according
d4040e0a 21to the given set of `<key>`. If `<count>` is given, stop after
23bfbb81 22showing that many refs. The interpolated values in `<format>`
9f613ddd 23can optionally be quoted as string literals in the specified
1729fa98 24host language allowing their direct evaluation in that language.
9f613ddd
JH
25
26OPTIONS
27-------
28<count>::
29 By default the command shows all refs that match
30 `<pattern>`. This option makes it stop after showing
31 that many refs.
32
33<key>::
34 A field name to sort on. Prefix `-` to sort in
35 descending order of the value. When unspecified,
c0f6dc9b
LW
36 `refname` is used. You may use the --sort=<key> option
37 multiple times, in which case the last key becomes the primary
38 key.
9f613ddd
JH
39
40<format>::
41 A string that interpolates `%(fieldname)` from the
42 object pointed at by a ref being shown. If `fieldname`
43 is prefixed with an asterisk (`*`) and the ref points
44 at a tag object, the value for the field in the object
45 tag refers is used. When unspecified, defaults to
ba7545ad
JN
46 `%(objectname) SPC %(objecttype) TAB %(refname)`.
47 It also interpolates `%%` to `%`, and `%xx` where `xx`
48 are hex digits interpolates to character with hex code
49 `xx`; for example `%00` interpolates to `\0` (NUL),
50 `%09` to `\t` (TAB) and `%0a` to `\n` (LF).
9f613ddd 51
f448e24e 52<pattern>...::
c0f6dc9b 53 If one or more patterns are given, only refs are shown that
1168d402 54 match against at least one pattern, either using fnmatch(3) or
c0f6dc9b
LW
55 literally, in the latter case matching completely or from the
56 beginning up to a slash.
9f613ddd 57
3240240f
SB
58--shell::
59--perl::
60--python::
61--tcl::
9f613ddd
JH
62 If given, strings that substitute `%(fieldname)`
63 placeholders are quoted as string literals suitable for
64 the specified host language. This is meant to produce
65 a scriptlet that can directly be `eval`ed.
66
d325406e
KN
67--points-at <object>::
68 Only list refs which points at the given object.
9f613ddd 69
7c328348
KN
70--merged [<object>]::
71 Only list refs whose tips are reachable from the
72 specified commit (HEAD if not specified).
73
74--no-merged [<object>]::
75 Only list refs whose tips are not reachable from the
76 specified commit (HEAD if not specified).
77
4a71109a
KN
78--contains [<object>]::
79 Only list tags which contain the specified commit (HEAD if not
80 specified).
81
9f613ddd
JH
82FIELD NAMES
83-----------
84
85Various values from structured fields in referenced objects can
86be used to interpolate into the resulting output, or as sort
87keys.
88
89For all objects, the following names can be used:
90
91refname::
69057cf3 92 The name of the ref (the part after $GIT_DIR/).
7d66f21a 93 For a non-ambiguous short name of the ref append `:short`.
2bb98169
BW
94 The option core.warnAmbiguousRefs is used to select the strict
95 abbreviation mode.
9f613ddd
JH
96
97objecttype::
98 The type of the object (`blob`, `tree`, `commit`, `tag`).
99
100objectsize::
0b444cdb 101 The size of the object (the same as 'git cat-file -s' reports).
9f613ddd
JH
102
103objectname::
104 The object name (aka SHA-1).
67687fea 105 For a non-ambiguous abbreviation of the object name append `:short`.
9f613ddd 106
8cae19d9
JK
107upstream::
108 The name of a local ref which can be considered ``upstream''
109 from the displayed ref. Respects `:short` in the same way as
b28061ce
RR
110 `refname` above. Additionally respects `:track` to show
111 "[ahead N, behind M]" and `:trackshort` to show the terse
112 version: ">" (ahead), "<" (behind), "<>" (ahead and behind),
113 or "=" (in sync). Has no effect if the ref does not have
114 tracking information associated with it.
8cae19d9 115
29bc8850
JK
116push::
117 The name of a local ref which represents the `@{push}` location
118 for the displayed ref. Respects `:short`, `:track`, and
119 `:trackshort` options as `upstream` does. Produces an empty
120 string if no `@{push}` ref is configured.
121
7a48b832
RR
122HEAD::
123 '*' if HEAD matches current ref (the checked out branch), ' '
124 otherwise.
125
fddb74c9
RR
126color::
127 Change output color. Followed by `:<colorname>`, where names
128 are described in `color.branch.*`.
129
9f613ddd
JH
130In addition to the above, for commit and tag objects, the header
131field names (`tree`, `parent`, `object`, `type`, and `tag`) can
132be used to specify the value in the header field.
133
134Fields that have name-email-date tuple as its value (`author`,
135`committer`, and `tagger`) can be suffixed with `name`, `email`,
136and `date` to extract the named component.
137
e2b23972 138The complete message in a commit and tag object is `contents`.
52ffe995
JW
139Its first line is `contents:subject`, where subject is the concatenation
140of all lines of the commit message up to the first blank line. The next
141line is 'contents:body', where body is all of the lines after the first
142blank line. Finally, the optional GPG signature is `contents:signature`.
9f613ddd
JH
143
144For sorting purposes, fields with numeric values sort in numeric
145order (`objectsize`, `authordate`, `committerdate`, `taggerdate`).
146All other fields are used to sort in their byte-value order.
147
148In any case, a field name that refers to a field inapplicable to
149the object referred by the ref does not cause an error. It
150returns an empty string instead.
151
d392e712
AP
152As a special case for the date-type fields, you may specify a format for
153the date by adding one of `:default`, `:relative`, `:short`, `:local`,
b344bb19 154`:iso8601`, `:rfc2822` or `:raw` to the end of the fieldname; e.g.
d392e712
AP
155`%(taggerdate:relative)`.
156
9f613ddd
JH
157
158EXAMPLES
159--------
160
1729fa98 161An example directly producing formatted text. Show the most recent
22817b40 1623 tagged commits:
9f613ddd
JH
163
164------------
165#!/bin/sh
166
b1889c36 167git for-each-ref --count=3 --sort='-*authordate' \
9f613ddd
JH
168--format='From: %(*authorname) %(*authoremail)
169Subject: %(*subject)
170Date: %(*authordate)
171Ref: %(*refname)
172
173%(*body)
174' 'refs/tags'
175------------
176
1729fa98
AW
177
178A simple example showing the use of shell eval on the output,
22817b40 179demonstrating the use of --shell. List the prefixes of all heads:
1729fa98
AW
180------------
181#!/bin/sh
182
b1889c36 183git for-each-ref --shell --format="ref=%(refname)" refs/heads | \
1729fa98
AW
184while read entry
185do
186 eval "$entry"
187 echo `dirname $ref`
188done
189------------
190
191
192A bit more elaborate report on tags, demonstrating that the format
22817b40 193may be an entire script:
9f613ddd
JH
194------------
195#!/bin/sh
196
197fmt='
198 r=%(refname)
199 t=%(*objecttype)
200 T=${r#refs/tags/}
201
202 o=%(*objectname)
203 n=%(*authorname)
204 e=%(*authoremail)
205 s=%(*subject)
206 d=%(*authordate)
207 b=%(*body)
208
209 kind=Tag
210 if test "z$t" = z
211 then
212 # could be a lightweight tag
213 t=%(objecttype)
214 kind="Lightweight tag"
215 o=%(objectname)
216 n=%(authorname)
217 e=%(authoremail)
218 s=%(subject)
219 d=%(authordate)
220 b=%(body)
221 fi
222 echo "$kind $T points at a $t object $o"
223 if test "z$t" = zcommit
224 then
225 echo "The commit was authored by $n $e
226at $d, and titled
227
228 $s
229
230Its message reads as:
231"
232 echo "$b" | sed -e "s/^/ /"
233 echo
234 fi
235'
236
b1889c36 237eval=`git for-each-ref --shell --format="$fmt" \
9f613ddd
JH
238 --sort='*objecttype' \
239 --sort=-taggerdate \
240 refs/tags`
241eval "$eval"
242------------
621c39de 243
f21e1c5d
MH
244SEE ALSO
245--------
246linkgit:git-show-ref[1]
247
621c39de
AS
248GIT
249---
250Part of the linkgit:git[1] suite