git-for-each-ref(1)
===================

NAME
----
git-for-each-ref - Output information on each ref

SYNOPSIS
--------
[verse]
'git for-each-ref' [--count=<count>] [--shell|--perl|--python|--tcl]
		   [(--sort=<key>)...] [--format=<format>]
		   [--include-root-refs] [ --stdin | <pattern>... ]
		   [--points-at=<object>]
		   [--merged[=<object>]] [--no-merged[=<object>]]
		   [--contains[=<object>]] [--no-contains[=<object>]]
		   [--exclude=<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
-------
<pattern>...::
	If one or more patterns are given, only refs are shown that
	match against at least one pattern, either using fnmatch(3) or
	literally, in the latter case matching completely or from the
	beginning up to a slash.

--stdin::
	If `--stdin` is supplied, then the list of patterns is read from
	standard input instead of from the argument list.

--count=<count>::
	By default the command shows all refs that match
	`<pattern>`.  This option makes it stop after showing
	that many refs.

--sort=<key>::
	A field name to sort on.  Prefix `-` to sort in
	descending order of the value.  When unspecified,
	`refname` is used.  You may use the --sort=<key> option
	multiple times, in which case the last key becomes the primary
	key.

--format=<format>::
	A string that interpolates `%(fieldname)` from a ref being shown and
	the object it points at. In addition, the string literal `%%`
	renders as `%` and `%xx` - where `xx` are hex digits - renders as
	the character with hex code `xx`. For example, `%00` interpolates to
	`\0` (NUL), `%09` to `\t` (TAB), and `%0a` to `\n` (LF).
+
When unspecified, `<format>` defaults to `%(objectname) SPC %(objecttype)
TAB %(refname)`.

--color[=<when>]::
	Respect any colors specified in the `--format` option. The
	`<when>` field must be one of `always`, `never`, or `auto` (if
	`<when>` is absent, behave as if `always` was given).

--shell::
--perl::
--python::
--tcl::
	If given, strings that substitute `%(fieldname)`
	placeholders are quoted as string literals suitable for
	the specified host language.  This is meant to produce
	a scriptlet that can directly be `eval`ed.

--points-at=<object>::
	Only list refs which points at the given object.

--merged[=<object>]::
	Only list refs whose tips are reachable from the
	specified commit (HEAD if not specified).

--no-merged[=<object>]::
	Only list refs whose tips are not reachable from the
	specified commit (HEAD if not specified).

--contains[=<object>]::
	Only list refs which contain the specified commit (HEAD if not
	specified).

--no-contains[=<object>]::
	Only list refs which don't contain the specified commit (HEAD
	if not specified).

--ignore-case::
	Sorting and filtering refs are case insensitive.

--omit-empty::
	Do not print a newline after formatted refs where the format expands
	to the empty string.

--exclude=<pattern>::
	If one or more patterns are given, only refs which do not match
	any excluded pattern(s) are shown. Matching is done using the
	same rules as `<pattern>` above.

--include-root-refs::
	List root refs (HEAD and pseudorefs) apart from regular refs.

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, strips `<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) and "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:<committish>::
	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.

describe[:options]::
	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 given `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 given `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[:options]` (or by using the historical alias
`contents:trailers[:options]`). 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.txt[]

SEE ALSO
--------
linkgit:git-show-ref[1]

GIT
---
Part of the linkgit:git[1] suite
