Documentation / git-for-each-ref.txton commit provide --color option for all ref-filter users (0c88bf5)
   1git-for-each-ref(1)
   2===================
   3
   4NAME
   5----
   6git-for-each-ref - Output information on each ref
   7
   8SYNOPSIS
   9--------
  10[verse]
  11'git for-each-ref' [--count=<count>] [--shell|--perl|--python|--tcl]
  12                   [(--sort=<key>)...] [--format=<format>] [<pattern>...]
  13                   [--points-at <object>] [(--merged | --no-merged) [<object>]]
  14                   [--contains [<object>]] [--no-contains [<object>]]
  15
  16DESCRIPTION
  17-----------
  18
  19Iterate over all refs that match `<pattern>` and show them
  20according to the given `<format>`, after sorting them according
  21to the given set of `<key>`.  If `<count>` is given, stop after
  22showing that many refs.  The interpolated values in `<format>`
  23can optionally be quoted as string literals in the specified
  24host language allowing their direct evaluation in that language.
  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,
  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.
  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
  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).
  51
  52<pattern>...::
  53        If one or more patterns are given, only refs are shown that
  54        match against at least one pattern, either using fnmatch(3) or
  55        literally, in the latter case matching completely or from the
  56        beginning up to a slash.
  57
  58--color[=<when>]:
  59        Respect any colors specified in the `--format` option. The
  60        `<when>` field must be one of `always`, `never`, or `auto` (if
  61        `<when>` is absent, behave as if `always` was given).
  62
  63--shell::
  64--perl::
  65--python::
  66--tcl::
  67        If given, strings that substitute `%(fieldname)`
  68        placeholders are quoted as string literals suitable for
  69        the specified host language.  This is meant to produce
  70        a scriptlet that can directly be `eval`ed.
  71
  72--points-at <object>::
  73        Only list refs which points at the given object.
  74
  75--merged [<object>]::
  76        Only list refs whose tips are reachable from the
  77        specified commit (HEAD if not specified),
  78        incompatible with `--no-merged`.
  79
  80--no-merged [<object>]::
  81        Only list refs whose tips are not reachable from the
  82        specified commit (HEAD if not specified),
  83        incompatible with `--merged`.
  84
  85--contains [<object>]::
  86        Only list refs which contain the specified commit (HEAD if not
  87        specified).
  88
  89--no-contains [<object>]::
  90        Only list refs which don't contain the specified commit (HEAD
  91        if not specified).
  92
  93--ignore-case::
  94        Sorting and filtering refs are case insensitive.
  95
  96FIELD NAMES
  97-----------
  98
  99Various values from structured fields in referenced objects can
 100be used to interpolate into the resulting output, or as sort
 101keys.
 102
 103For all objects, the following names can be used:
 104
 105refname::
 106        The name of the ref (the part after $GIT_DIR/).
 107        For a non-ambiguous short name of the ref append `:short`.
 108        The option core.warnAmbiguousRefs is used to select the strict
 109        abbreviation mode. If `lstrip=<N>` (`rstrip=<N>`) is appended, strips `<N>`
 110        slash-separated path components from the front (back) of the refname
 111        (e.g. `%(refname:lstrip=2)` turns `refs/tags/foo` into `foo` and
 112        `%(refname:rstrip=2)` turns `refs/tags/foo` into `refs`).
 113        If `<N>` is a negative number, strip as many path components as
 114        necessary from the specified end to leave `-<N>` path components
 115        (e.g. `%(refname:lstrip=-2)` turns
 116        `refs/tags/foo` into `tags/foo` and `%(refname:rstrip=-1)`
 117        turns `refs/tags/foo` into `refs`). When the ref does not have
 118        enough components, the result becomes an empty string if
 119        stripping with positive <N>, or it becomes the full refname if
 120        stripping with negative <N>.  Neither is an error.
 121+
 122`strip` can be used as a synomym to `lstrip`.
 123
 124objecttype::
 125        The type of the object (`blob`, `tree`, `commit`, `tag`).
 126
 127objectsize::
 128        The size of the object (the same as 'git cat-file -s' reports).
 129
 130objectname::
 131        The object name (aka SHA-1).
 132        For a non-ambiguous abbreviation of the object name append `:short`.
 133        For an abbreviation of the object name with desired length append
 134        `:short=<length>`, where the minimum length is MINIMUM_ABBREV. The
 135        length may be exceeded to ensure unique object names.
 136
 137upstream::
 138        The name of a local ref which can be considered ``upstream''
 139        from the displayed ref. Respects `:short`, `:lstrip` and
 140        `:rstrip` in the same way as `refname` above.  Additionally
 141        respects `:track` to show "[ahead N, behind M]" and
 142        `:trackshort` to show the terse version: ">" (ahead), "<"
 143        (behind), "<>" (ahead and behind), or "=" (in sync). `:track`
 144        also prints "[gone]" whenever unknown upstream ref is
 145        encountered. Append `:track,nobracket` to show tracking
 146        information without brackets (i.e "ahead N, behind M").  Has
 147        no effect if the ref does not have tracking information
 148        associated with it.  All the options apart from `nobracket`
 149        are mutually exclusive, but if used together the last option
 150        is selected.
 151
 152push::
 153        The name of a local ref which represents the `@{push}`
 154        location for the displayed ref. Respects `:short`, `:lstrip`,
 155        `:rstrip`, `:track`, and `:trackshort` options as `upstream`
 156        does. Produces an empty string if no `@{push}` ref is
 157        configured.
 158
 159HEAD::
 160        '*' if HEAD matches current ref (the checked out branch), ' '
 161        otherwise.
 162
 163color::
 164        Change output color. Followed by `:<colorname>`, where color
 165        names are described under Values in the "CONFIGURATION FILE"
 166        section of linkgit:git-config[1].  For example,
 167        `%(color:bold red)`.
 168
 169align::
 170        Left-, middle-, or right-align the content between
 171        %(align:...) and %(end). The "align:" is followed by
 172        `width=<width>` and `position=<position>` in any order
 173        separated by a comma, where the `<position>` is either left,
 174        right or middle, default being left and `<width>` is the total
 175        length of the content with alignment. For brevity, the
 176        "width=" and/or "position=" prefixes may be omitted, and bare
 177        <width> and <position> used instead.  For instance,
 178        `%(align:<width>,<position>)`. If the contents length is more
 179        than the width then no alignment is performed. If used with
 180        `--quote` everything in between %(align:...) and %(end) is
 181        quoted, but if nested then only the topmost level performs
 182        quoting.
 183
 184if::
 185        Used as %(if)...%(then)...%(end) or
 186        %(if)...%(then)...%(else)...%(end).  If there is an atom with
 187        value or string literal after the %(if) then everything after
 188        the %(then) is printed, else if the %(else) atom is used, then
 189        everything after %(else) is printed. We ignore space when
 190        evaluating the string before %(then), this is useful when we
 191        use the %(HEAD) atom which prints either "*" or " " and we
 192        want to apply the 'if' condition only on the 'HEAD' ref.
 193        Append ":equals=<string>" or ":notequals=<string>" to compare
 194        the value between the %(if:...) and %(then) atoms with the
 195        given string.
 196
 197symref::
 198        The ref which the given symbolic ref refers to. If not a
 199        symbolic ref, nothing is printed. Respects the `:short`,
 200        `:lstrip` and `:rstrip` options in the same way as `refname`
 201        above.
 202
 203In addition to the above, for commit and tag objects, the header
 204field names (`tree`, `parent`, `object`, `type`, and `tag`) can
 205be used to specify the value in the header field.
 206
 207For commit and tag objects, the special `creatordate` and `creator`
 208fields will correspond to the appropriate date or name-email-date tuple
 209from the `committer` or `tagger` fields depending on the object type.
 210These are intended for working on a mix of annotated and lightweight tags.
 211
 212Fields that have name-email-date tuple as its value (`author`,
 213`committer`, and `tagger`) can be suffixed with `name`, `email`,
 214and `date` to extract the named component.
 215
 216The complete message in a commit and tag object is `contents`.
 217Its first line is `contents:subject`, where subject is the concatenation
 218of all lines of the commit message up to the first blank line.  The next
 219line is 'contents:body', where body is all of the lines after the first
 220blank line.  The optional GPG signature is `contents:signature`.  The
 221first `N` lines of the message is obtained using `contents:lines=N`.
 222Additionally, the trailers as interpreted by linkgit:git-interpret-trailers[1]
 223are obtained as 'contents:trailers'.
 224
 225For sorting purposes, fields with numeric values sort in numeric order
 226(`objectsize`, `authordate`, `committerdate`, `creatordate`, `taggerdate`).
 227All other fields are used to sort in their byte-value order.
 228
 229There is also an option to sort by versions, this can be done by using
 230the fieldname `version:refname` or its alias `v:refname`.
 231
 232In any case, a field name that refers to a field inapplicable to
 233the object referred by the ref does not cause an error.  It
 234returns an empty string instead.
 235
 236As a special case for the date-type fields, you may specify a format for
 237the date by adding `:` followed by date format name (see the
 238values the `--date` option to linkgit:git-rev-list[1] takes).
 239
 240Some atoms like %(align) and %(if) always require a matching %(end).
 241We call them "opening atoms" and sometimes denote them as %($open).
 242
 243When a scripting language specific quoting is in effect, everything
 244between a top-level opening atom and its matching %(end) is evaluated
 245according to the semantics of the opening atom and only its result
 246from the top-level is quoted.
 247
 248
 249EXAMPLES
 250--------
 251
 252An example directly producing formatted text.  Show the most recent
 2533 tagged commits:
 254
 255------------
 256#!/bin/sh
 257
 258git for-each-ref --count=3 --sort='-*authordate' \
 259--format='From: %(*authorname) %(*authoremail)
 260Subject: %(*subject)
 261Date: %(*authordate)
 262Ref: %(*refname)
 263
 264%(*body)
 265' 'refs/tags'
 266------------
 267
 268
 269A simple example showing the use of shell eval on the output,
 270demonstrating the use of --shell.  List the prefixes of all heads:
 271------------
 272#!/bin/sh
 273
 274git for-each-ref --shell --format="ref=%(refname)" refs/heads | \
 275while read entry
 276do
 277        eval "$entry"
 278        echo `dirname $ref`
 279done
 280------------
 281
 282
 283A bit more elaborate report on tags, demonstrating that the format
 284may be an entire script:
 285------------
 286#!/bin/sh
 287
 288fmt='
 289        r=%(refname)
 290        t=%(*objecttype)
 291        T=${r#refs/tags/}
 292
 293        o=%(*objectname)
 294        n=%(*authorname)
 295        e=%(*authoremail)
 296        s=%(*subject)
 297        d=%(*authordate)
 298        b=%(*body)
 299
 300        kind=Tag
 301        if test "z$t" = z
 302        then
 303                # could be a lightweight tag
 304                t=%(objecttype)
 305                kind="Lightweight tag"
 306                o=%(objectname)
 307                n=%(authorname)
 308                e=%(authoremail)
 309                s=%(subject)
 310                d=%(authordate)
 311                b=%(body)
 312        fi
 313        echo "$kind $T points at a $t object $o"
 314        if test "z$t" = zcommit
 315        then
 316                echo "The commit was authored by $n $e
 317at $d, and titled
 318
 319    $s
 320
 321Its message reads as:
 322"
 323                echo "$b" | sed -e "s/^/    /"
 324                echo
 325        fi
 326'
 327
 328eval=`git for-each-ref --shell --format="$fmt" \
 329        --sort='*objecttype' \
 330        --sort=-taggerdate \
 331        refs/tags`
 332eval "$eval"
 333------------
 334
 335
 336An example to show the usage of %(if)...%(then)...%(else)...%(end).
 337This prefixes the current branch with a star.
 338
 339------------
 340git for-each-ref --format="%(if)%(HEAD)%(then)* %(else)  %(end)%(refname:short)" refs/heads/
 341------------
 342
 343
 344An example to show the usage of %(if)...%(then)...%(end).
 345This prints the authorname, if present.
 346
 347------------
 348git for-each-ref --format="%(refname)%(if)%(authorname)%(then) Authored by: %(authorname)%(end)"
 349------------
 350
 351SEE ALSO
 352--------
 353linkgit:git-show-ref[1]
 354
 355GIT
 356---
 357Part of the linkgit:git[1] suite