| git-for-each-ref(1) | 
 | =================== | 
 |  | 
 | NAME | 
 | ---- | 
 | git-for-each-ref - Output information on each ref | 
 |  | 
 | SYNOPSIS | 
 | -------- | 
 | [synopsis] | 
 | git for-each-ref [--count=<count>] [--shell|--perl|--python|--tcl] | 
 | 		   [(--sort=<key>)...] [--format=<format>] | 
 | 		   [--include-root-refs] [--points-at=<object>] | 
 | 		   [--merged[=<object>]] [--no-merged[=<object>]] | 
 | 		   [--contains[=<object>]] [--no-contains[=<object>]] | 
 | 		   [(--exclude=<pattern>)...] [--start-after=<marker>] | 
 | 		   [ --stdin | (<pattern>...)] | 
 |  | 
 | DESCRIPTION | 
 | ----------- | 
 |  | 
 | Iterate over all refs that match _<pattern>_ and show them | 
 | according to the given _<format>_, after sorting them according | 
 | to the given set of _<key>_.  If _<count>_ is given, stop after | 
 | showing that many refs.  The interpolated values in _<format>_ | 
 | can optionally be quoted as string literals in the specified | 
 | host language allowing their direct evaluation in that language. | 
 |  | 
 | OPTIONS | 
 | ------- | 
 | include::for-each-ref-options.adoc[] | 
 |  | 
 | FIELD NAMES | 
 | ----------- | 
 |  | 
 | Various values from structured fields in referenced objects can | 
 | be used to interpolate into the resulting output, or as sort | 
 | keys. | 
 |  | 
 | For all objects, the following names can be used: | 
 |  | 
 | `refname`:: | 
 | 	The name of the ref (the part after `$GIT_DIR/`). | 
 | 	For a non-ambiguous short name of the ref append `:short`. | 
 | 	The option `core.warnAmbiguousRefs` is used to select the strict | 
 | 	abbreviation mode. If `lstrip=<n>` (`rstrip=<n>`) is appended, strip _<n>_ | 
 | 	slash-separated path components from the front (back) of the refname | 
 | 	(e.g. `%(refname:lstrip=2)` turns `refs/tags/foo` into `foo` and | 
 | 	`%(refname:rstrip=2)` turns `refs/tags/foo` into `refs`). | 
 | 	If _<n>_ is a negative number, strip as many path components as | 
 | 	necessary from the specified end to leave `-<n>` path components | 
 | 	(e.g. `%(refname:lstrip=-2)` turns | 
 | 	`refs/tags/foo` into `tags/foo` and `%(refname:rstrip=-1)` | 
 | 	turns `refs/tags/foo` into `refs`). When the ref does not have | 
 | 	enough components, the result becomes an empty string if | 
 | 	stripping with positive _<n>_, or it becomes the full refname if | 
 | 	stripping with negative _<N>_.  Neither is an error. | 
 | + | 
 | `strip` can be used as a synonym to `lstrip`. | 
 |  | 
 | `objecttype`:: | 
 | 	The type of the object (`blob`, `tree`, `commit`, `tag`). | 
 |  | 
 | `objectsize`:: | 
 | 	The size of the object (the same as 'git cat-file -s' reports). | 
 | 	Append `:disk` to get the size, in bytes, that the object takes up on | 
 | 	disk. See the note about on-disk sizes in the 'CAVEATS' section below. | 
 | `objectname`:: | 
 | 	The object name (aka SHA-1). | 
 | 	For a non-ambiguous abbreviation of the object name append `:short`. | 
 | 	For an abbreviation of the object name with desired length append | 
 | 	`:short=<length>`, where the minimum length is `MINIMUM_ABBREV`. The | 
 | 	length may be exceeded to ensure unique object names. | 
 | `deltabase`:: | 
 | 	This expands to the object name of the delta base for the | 
 | 	given object, if it is stored as a delta.  Otherwise it | 
 | 	expands to the null object name (all zeroes). | 
 |  | 
 | `upstream`:: | 
 | 	The name of a local ref which can be considered ``upstream'' | 
 | 	from the displayed ref. Respects `:short`, `:lstrip` and | 
 | 	`:rstrip` in the same way as `refname` above.  Additionally | 
 | 	respects `:track` to show "[ahead N, behind M]" and | 
 | 	`:trackshort` to show the terse version: ">" (ahead), "<" | 
 | 	(behind), "<>" (ahead and behind), or "=" (in sync). `:track` | 
 | 	also prints "[gone]" whenever unknown upstream ref is | 
 | 	encountered. Append `:track,nobracket` to show tracking | 
 | 	information without brackets (i.e "ahead N, behind M"). | 
 | + | 
 | For any remote-tracking branch `%(upstream)`, `%(upstream:remotename)` | 
 | and `%(upstream:remoteref)` refer to the name of the remote and the | 
 | name of the tracked remote ref, respectively. In other words, the | 
 | remote-tracking branch can be updated explicitly and individually by | 
 | using the refspec `%(upstream:remoteref):%(upstream)` to fetch from | 
 | `%(upstream:remotename)`. | 
 | + | 
 | Has no effect if the ref does not have tracking information associated | 
 | with it.  All the options apart from `nobracket` are mutually exclusive, | 
 | but if used together the last option is selected. | 
 |  | 
 | `push`:: | 
 | 	The name of a local ref which represents the `@{push}` | 
 | 	location for the displayed ref. Respects `:short`, `:lstrip`, | 
 | 	`:rstrip`, `:track`, `:trackshort`, `:remotename`, and `:remoteref` | 
 | 	options as `upstream` does. Produces an empty string if no `@{push}` | 
 | 	ref is configured. | 
 |  | 
 | `HEAD`:: | 
 | 	`*` if `HEAD` matches current ref (the checked out branch), ' ' | 
 | 	otherwise. | 
 |  | 
 | `color`:: | 
 | 	Change output color. Followed by `:<colorname>`, where color | 
 | 	names are described under Values in the "CONFIGURATION FILE" | 
 | 	section of linkgit:git-config[1].  For example, | 
 | 	`%(color:bold red)`. | 
 |  | 
 | `align`:: | 
 | 	Left-, middle-, or right-align the content between | 
 | 	`%(align:...)` and `%(end)`. The "`align:`" is followed by | 
 | 	`width=<width>` and `position=<position>` in any order | 
 | 	separated by a comma, where the _<position>_ is either `left`, | 
 | 	`right` or `middle`, default being `left` and _<width>_ is the total | 
 | 	length of the content with alignment. For brevity, the | 
 | 	"width=" and/or "position=" prefixes may be omitted, and bare | 
 | 	_<width>_ and _<position>_ used instead.  For instance, | 
 | 	`%(align:<width>,<position>)`. If the contents length is more | 
 | 	than the width then no alignment is performed. If used with | 
 | 	`--quote` everything in between `%(align:...)` and `%(end)` is | 
 | 	quoted, but if nested then only the topmost level performs | 
 | 	quoting. | 
 |  | 
 | `if`:: | 
 | 	Used as `%(if)...%(then)...%(end)` or | 
 | 	`%(if)...%(then)...%(else)...%(end)`.  If there is an atom with | 
 | 	value or string literal after the `%(if)` then everything after | 
 | 	the `%(then)` is printed, else if the `%(else)` atom is used, then | 
 | 	everything after %(else) is printed. We ignore space when | 
 | 	evaluating the string before `%(then)`, this is useful when we | 
 | 	use the `%(HEAD)` atom which prints either "`*`" or " " and we | 
 | 	want to apply the 'if' condition only on the `HEAD` ref. | 
 | 	Append "`:equals=<string>`" or "`:notequals=<string>`" to compare | 
 | 	the value between the `%(if:...)` and `%(then)` atoms with the | 
 | 	given string. | 
 |  | 
 | `symref`:: | 
 | 	The ref which the given symbolic ref refers to. If not a | 
 | 	symbolic ref, nothing is printed. Respects the `:short`, | 
 | 	`:lstrip` and `:rstrip` options in the same way as `refname` | 
 | 	above. | 
 |  | 
 | `signature`:: | 
 | 	The GPG signature of a commit. | 
 |  | 
 | `signature:grade`:: | 
 | 	Show | 
 | `G`;; for a good (valid) signature | 
 | `B`;; for a bad signature | 
 | `U`;; for a good signature with unknown validity | 
 | `X`;;	for a good signature that has expired | 
 | `Y`;; for a good signature made by an expired key | 
 | `R`;; for a good signature made by a revoked key | 
 | `E`;; if the signature cannot be checked (e.g. missing key) | 
 | `N`;; for no signature. | 
 |  | 
 | `signature:signer`:: | 
 | 	The signer of the GPG signature of a commit. | 
 |  | 
 | `signature:key`:: | 
 | 	The key of the GPG signature of a commit. | 
 |  | 
 | `signature:fingerprint`:: | 
 | 	The fingerprint of the GPG signature of a commit. | 
 |  | 
 | `signature:primarykeyfingerprint`:: | 
 | 	The primary key fingerprint of the GPG signature of a commit. | 
 |  | 
 | `signature:trustlevel`:: | 
 | 	The trust level of the GPG signature of a commit. Possible | 
 | 	outputs are `ultimate`, `fully`, `marginal`, `never` and `undefined`. | 
 |  | 
 | `worktreepath`:: | 
 | 	The absolute path to the worktree in which the ref is checked | 
 | 	out, if it is checked out in any linked worktree. Empty string | 
 | 	otherwise. | 
 |  | 
 | `ahead-behind:<commit-ish>`:: | 
 | 	Two integers, separated by a space, demonstrating the number of | 
 | 	commits ahead and behind, respectively, when comparing the output | 
 | 	ref to the _<committish>_ specified in the format. | 
 |  | 
 | `is-base:<commit-ish>`:: | 
 | 	In at most one row, `(<commit-ish>)` will appear to indicate the ref | 
 | 	that is most likely the ref used as a starting point for the branch | 
 | 	that produced _<commit-ish>_. This choice is made using a heuristic: | 
 | 	choose the ref that minimizes the number of commits in the | 
 | 	first-parent history of _<commit-ish>_ and not in the first-parent | 
 | 	history of the ref. | 
 | + | 
 | For example, consider the following figure of first-parent histories of | 
 | several refs: | 
 | + | 
 | ---- | 
 | *--*--*--*--*--* refs/heads/A | 
 | \ | 
 |  \ | 
 |   *--*--*--* refs/heads/B | 
 |    \     \ | 
 |     \     \ | 
 |      *     * refs/heads/C | 
 |       \ | 
 |        \ | 
 | 	*--* refs/heads/D | 
 | ---- | 
 | + | 
 | Here, if `A`, `B`, and `C` are the filtered references, and the format | 
 | string is `%(refname):%(is-base:D)`, then the output would be | 
 | + | 
 | ---- | 
 | refs/heads/A: | 
 | refs/heads/B:(D) | 
 | refs/heads/C: | 
 | ---- | 
 | + | 
 | This is because the first-parent history of `D` has its earliest | 
 | intersection with the first-parent histories of the filtered refs at a | 
 | common first-parent ancestor of `B` and `C` and ties are broken by the | 
 | earliest ref in the sorted order. | 
 | + | 
 | Note that this token will not appear if the first-parent history of | 
 | _<commit-ish>_ does not intersect the first-parent histories of the | 
 | filtered refs. | 
 |  | 
 | `describe[:<option>,...]`:: | 
 | 	A human-readable name, like linkgit:git-describe[1]; | 
 | 	empty string for undescribable commits. The `describe` string may | 
 | 	be followed by a colon and one or more comma-separated options. | 
 | + | 
 | -- | 
 | `tags=<bool-value>`;; | 
 | 	Instead of only considering annotated tags, consider | 
 | 	lightweight tags as well; see the corresponding option in | 
 | 	linkgit:git-describe[1] for details. | 
 | `abbrev=<number>`;; | 
 | 	Use at least _<number>_ hexadecimal digits; see the corresponding | 
 | 	option in linkgit:git-describe[1] for details. | 
 | `match=<pattern>`;; | 
 | 	Only consider tags matching the `glob`(7) _<pattern>_, | 
 | 	excluding the `refs/tags/` prefix; see the corresponding option | 
 | 	in linkgit:git-describe[1] for details. | 
 | `exclude=<pattern>`;; | 
 | 	Do not consider tags matching the `glob`(7) _<pattern>_, | 
 | 	excluding the `refs/tags/` prefix; see the corresponding option | 
 | 	in linkgit:git-describe[1] for details. | 
 | -- | 
 |  | 
 | In addition to the above, for commit and tag objects, the header | 
 | field names (`tree`, `parent`, `object`, `type`, and `tag`) can | 
 | be used to specify the value in the header field. | 
 | Fields `tree` and `parent` can also be used with modifier `:short` and | 
 | `:short=<length>` just like `objectname`. | 
 |  | 
 | For commit and tag objects, the special `creatordate` and `creator` | 
 | fields will correspond to the appropriate date or name-email-date tuple | 
 | from the `committer` or `tagger` fields depending on the object type. | 
 | These are intended for working on a mix of annotated and lightweight tags. | 
 |  | 
 | For tag objects, a `fieldname` prefixed with an asterisk (`*`) expands to | 
 | the `fieldname` value of the peeled object, rather than that of the tag | 
 | object itself. | 
 |  | 
 | Fields that have name-email-date tuple as its value (`author`, | 
 | `committer`, and `tagger`) can be suffixed with `name`, `email`, | 
 | and `date` to extract the named component.  For email fields (`authoremail`, | 
 | `committeremail` and `taggeremail`), `:trim` can be appended to get the email | 
 | without angle brackets, and `:localpart` to get the part before the `@` symbol | 
 | out of the trimmed email. In addition to these, the `:mailmap` option and the | 
 | corresponding `:mailmap,trim` and `:mailmap,localpart` can be used (order does | 
 | not matter) to get values of the name and email according to the .mailmap file | 
 | or according to the file set in the mailmap.file or mailmap.blob configuration | 
 | variable (see linkgit:gitmailmap[5]). | 
 |  | 
 | The raw data in an object is `raw`. | 
 |  | 
 | `raw:size`:: | 
 | 	The raw data size of the object. | 
 |  | 
 | Note that `--format=%(raw)` can not be used with `--python`, `--shell`, `--tcl`, | 
 | because such language may not support arbitrary binary data in their string | 
 | variable type. | 
 |  | 
 | The message in a commit or a tag object is `contents`, from which | 
 | `contents:<part>` can be used to extract various parts out of: | 
 |  | 
 | `contents:size`:: | 
 | 	The size in bytes of the commit or tag message. | 
 |  | 
 | `contents:subject`:: | 
 | 	The first paragraph of the message, which typically is a | 
 | 	single line, is taken as the "subject" of the commit or the | 
 | 	tag message. | 
 | 	Instead of `contents:subject`, field `subject` can also be used to | 
 | 	obtain same results. `:sanitize` can be appended to `subject` for | 
 | 	subject line suitable for filename. | 
 |  | 
 | `contents:body`:: | 
 | 	The remainder of the commit or the tag message that follows | 
 | 	the "subject". | 
 |  | 
 | `contents:signature`:: | 
 | 	The optional GPG signature of the tag. | 
 |  | 
 | `contents:lines=<n>`:: | 
 | 	The first _<n>_ lines of the message. | 
 |  | 
 | Additionally, the trailers as interpreted by linkgit:git-interpret-trailers[1] | 
 | are obtained as `trailers[:<option>,...]` (or by using the historical alias | 
 | `contents:trailers[:<option>,...]`). For valid _<option>_ values see `trailers` | 
 | section of linkgit:git-log[1]. | 
 |  | 
 | For sorting purposes, fields with numeric values sort in numeric order | 
 | (`objectsize`, `authordate`, `committerdate`, `creatordate`, `taggerdate`). | 
 | All other fields are used to sort in their byte-value order. | 
 |  | 
 | There is also an option to sort by versions, this can be done by using | 
 | the fieldname `version:refname` or its alias `v:refname`. | 
 |  | 
 | In any case, a field name that refers to a field inapplicable to | 
 | the object referred by the ref does not cause an error.  It | 
 | returns an empty string instead. | 
 |  | 
 | As a special case for the date-type fields, you may specify a format for the | 
 | date by adding `:` followed by date format name (see the values the `--date` | 
 | option to linkgit:git-rev-list[1] takes). If this formatting is provided in | 
 | a `--sort` key, references will be sorted according to the byte-value of the | 
 | formatted string rather than the numeric value of the underlying timestamp. | 
 |  | 
 | Some atoms like `%(align)` and `%(if)` always require a matching `%(end)`. | 
 | We call them "opening atoms" and sometimes denote them as `%($open)`. | 
 |  | 
 | When a scripting language specific quoting is in effect, everything | 
 | between a top-level opening atom and its matching %(end) is evaluated | 
 | according to the semantics of the opening atom and only its result | 
 | from the top-level is quoted. | 
 |  | 
 |  | 
 | EXAMPLES | 
 | -------- | 
 |  | 
 | An example directly producing formatted text.  Show the most recent | 
 | 3 tagged commits: | 
 |  | 
 | ------------ | 
 | #!/bin/sh | 
 |  | 
 | git for-each-ref --count=3 --sort='-*authordate' \ | 
 | `--format='From: %(*authorname) %(*authoremail) | 
 | Subject: %(*subject) | 
 | Date: %(*authordate) | 
 | Ref: %(*refname) | 
 |  | 
 | %(*body) | 
 | ' 'refs/tags' | 
 | ------------ | 
 |  | 
 |  | 
 | A simple example showing the use of shell eval on the output, | 
 | demonstrating the use of `--shell`.  List the prefixes of all heads: | 
 |  | 
 | ------------ | 
 | #!/bin/sh | 
 |  | 
 | git for-each-ref --shell --format="ref=%(refname)" refs/heads | \ | 
 | while read entry | 
 | do | 
 | 	eval "$entry" | 
 | 	echo `dirname $ref` | 
 | done | 
 | ------------ | 
 |  | 
 |  | 
 | A bit more elaborate report on tags, demonstrating that the format | 
 | may be an entire script: | 
 |  | 
 | ------------ | 
 | #!/bin/sh | 
 |  | 
 | fmt=' | 
 | 	r=%(refname) | 
 | 	t=%(*objecttype) | 
 | 	T=${r#refs/tags/} | 
 |  | 
 | 	o=%(*objectname) | 
 | 	n=%(*authorname) | 
 | 	e=%(*authoremail) | 
 | 	s=%(*subject) | 
 | 	d=%(*authordate) | 
 | 	b=%(*body) | 
 |  | 
 | 	kind=Tag | 
 | 	if test "z$t" = z | 
 | 	then | 
 | 		# could be a lightweight tag | 
 | 		t=%(objecttype) | 
 | 		kind="Lightweight tag" | 
 | 		o=%(objectname) | 
 | 		n=%(authorname) | 
 | 		e=%(authoremail) | 
 | 		s=%(subject) | 
 | 		d=%(authordate) | 
 | 		b=%(body) | 
 | 	fi | 
 | 	echo "$kind $T points at a $t object $o" | 
 | 	if test "z$t" = zcommit | 
 | 	then | 
 | 		echo "The commit was authored by $n $e | 
 | at $d, and titled | 
 |  | 
 |     $s | 
 |  | 
 | Its message reads as: | 
 | " | 
 | 		echo "$b" | sed -e "s/^/    /" | 
 | 		echo | 
 | 	fi | 
 | ' | 
 |  | 
 | eval=`git for-each-ref --shell --format="$fmt" \ | 
 | 	--sort='*objecttype' \ | 
 | 	--sort=-taggerdate \ | 
 | 	refs/tags` | 
 | eval "$eval" | 
 | ------------ | 
 |  | 
 |  | 
 | An example to show the usage of `%(if)...%(then)...%(else)...%(end)`. | 
 | This prefixes the current branch with a star. | 
 |  | 
 | ------------ | 
 | git for-each-ref --format="%(if)%(HEAD)%(then)* %(else)  %(end)%(refname:short)" refs/heads/ | 
 | ------------ | 
 |  | 
 |  | 
 | An example to show the usage of `%(if)...%(then)...%(end)`. | 
 | This prints the authorname, if present. | 
 |  | 
 | ------------ | 
 | git for-each-ref --format="%(refname)%(if)%(authorname)%(then) Authored by: %(authorname)%(end)" | 
 | ------------ | 
 |  | 
 | CAVEATS | 
 | ------- | 
 |  | 
 | Note that the sizes of objects on disk are reported accurately, but care | 
 | should be taken in drawing conclusions about which refs or objects are | 
 | responsible for disk usage. The size of a packed non-delta object may be | 
 | much larger than the size of objects which delta against it, but the | 
 | choice of which object is the base and which is the delta is arbitrary | 
 | and is subject to change during a repack. | 
 |  | 
 | Note also that multiple copies of an object may be present in the object | 
 | database; in this case, it is undefined which copy's size or delta base | 
 | will be reported. | 
 |  | 
 | NOTES | 
 | ----- | 
 |  | 
 | include::ref-reachability-filters.adoc[] | 
 |  | 
 | SEE ALSO | 
 | -------- | 
 | linkgit:git-show-ref[1] | 
 |  | 
 | GIT | 
 | --- | 
 | Part of the linkgit:git[1] suite |