Documentation / git-notes.txton commit New --dirstat=lines mode, doing dirstat analysis based on diffstat (1c57a62)
   1git-notes(1)
   2============
   3
   4NAME
   5----
   6git-notes - Add or inspect object notes
   7
   8SYNOPSIS
   9--------
  10[verse]
  11'git notes' [list [<object>]]
  12'git notes' add [-f] [-F <file> | -m <msg> | (-c | -C) <object>] [<object>]
  13'git notes' copy [-f] ( --stdin | <from-object> <to-object> )
  14'git notes' append [-F <file> | -m <msg> | (-c | -C) <object>] [<object>]
  15'git notes' edit [<object>]
  16'git notes' show [<object>]
  17'git notes' merge [-v | -q] [-s <strategy> ] <notes_ref>
  18'git notes' merge --commit [-v | -q]
  19'git notes' merge --abort [-v | -q]
  20'git notes' remove [<object>]
  21'git notes' prune [-n | -v]
  22'git notes' get-ref
  23
  24
  25DESCRIPTION
  26-----------
  27Adds, removes, or reads notes attached to objects, without touching
  28the objects themselves.
  29
  30By default, notes are saved to and read from `refs/notes/commits`, but
  31this default can be overridden.  See the OPTIONS, CONFIGURATION, and
  32ENVIRONMENT sections below.  If this ref does not exist, it will be
  33quietly created when it is first needed to store a note.
  34
  35A typical use of notes is to supplement a commit message without
  36changing the commit itself. Notes can be shown by 'git log' along with
  37the original commit message. To distinguish these notes from the
  38message stored in the commit object, the notes are indented like the
  39message, after an unindented line saying "Notes (<refname>):" (or
  40"Notes:" for `refs/notes/commits`).
  41
  42To change which notes are shown by 'git log', see the
  43"notes.displayRef" configuration in linkgit:git-log[1].
  44
  45See the "notes.rewrite.<command>" configuration for a way to carry
  46notes across commands that rewrite commits.
  47
  48
  49SUBCOMMANDS
  50-----------
  51
  52list::
  53        List the notes object for a given object. If no object is
  54        given, show a list of all note objects and the objects they
  55        annotate (in the format "<note object> <annotated object>").
  56        This is the default subcommand if no subcommand is given.
  57
  58add::
  59        Add notes for a given object (defaults to HEAD). Abort if the
  60        object already has notes (use `-f` to overwrite an
  61        existing note).
  62
  63copy::
  64        Copy the notes for the first object onto the second object.
  65        Abort if the second object already has notes, or if the first
  66        object has none (use -f to overwrite existing notes to the
  67        second object). This subcommand is equivalent to:
  68        `git notes add [-f] -C $(git notes list <from-object>) <to-object>`
  69+
  70In `\--stdin` mode, take lines in the format
  71+
  72----------
  73<from-object> SP <to-object> [ SP <rest> ] LF
  74----------
  75+
  76on standard input, and copy the notes from each <from-object> to its
  77corresponding <to-object>.  (The optional `<rest>` is ignored so that
  78the command can read the input given to the `post-rewrite` hook.)
  79
  80append::
  81        Append to the notes of an existing object (defaults to HEAD).
  82        Creates a new notes object if needed.
  83
  84edit::
  85        Edit the notes for a given object (defaults to HEAD).
  86
  87show::
  88        Show the notes for a given object (defaults to HEAD).
  89
  90merge::
  91        Merge the given notes ref into the current notes ref.
  92        This will try to merge the changes made by the given
  93        notes ref (called "remote") since the merge-base (if
  94        any) into the current notes ref (called "local").
  95+
  96If conflicts arise and a strategy for automatically resolving
  97conflicting notes (see the -s/--strategy option) is not given,
  98the "manual" resolver is used. This resolver checks out the
  99conflicting notes in a special worktree (`.git/NOTES_MERGE_WORKTREE`),
 100and instructs the user to manually resolve the conflicts there.
 101When done, the user can either finalize the merge with
 102'git notes merge --commit', or abort the merge with
 103'git notes merge --abort'.
 104
 105remove::
 106        Remove the notes for a given object (defaults to HEAD).
 107        This is equivalent to specifying an empty note message to
 108        the `edit` subcommand.
 109
 110prune::
 111        Remove all notes for non-existing/unreachable objects.
 112
 113get-ref::
 114        Print the current notes ref. This provides an easy way to
 115        retrieve the current notes ref (e.g. from scripts).
 116
 117OPTIONS
 118-------
 119-f::
 120--force::
 121        When adding notes to an object that already has notes,
 122        overwrite the existing notes (instead of aborting).
 123
 124-m <msg>::
 125--message=<msg>::
 126        Use the given note message (instead of prompting).
 127        If multiple `-m` options are given, their values
 128        are concatenated as separate paragraphs.
 129        Lines starting with `#` and empty lines other than a
 130        single line between paragraphs will be stripped out.
 131
 132-F <file>::
 133--file=<file>::
 134        Take the note message from the given file.  Use '-' to
 135        read the note message from the standard input.
 136        Lines starting with `#` and empty lines other than a
 137        single line between paragraphs will be stripped out.
 138
 139-C <object>::
 140--reuse-message=<object>::
 141        Take the note message from the given blob object (for
 142        example, another note).
 143
 144-c <object>::
 145--reedit-message=<object>::
 146        Like '-C', but with '-c' the editor is invoked, so that
 147        the user can further edit the note message.
 148
 149--ref <ref>::
 150        Manipulate the notes tree in <ref>.  This overrides
 151        'GIT_NOTES_REF' and the "core.notesRef" configuration.  The ref
 152        is taken to be in `refs/notes/` if it is not qualified.
 153
 154-n::
 155--dry-run::
 156        Do not remove anything; just report the object names whose notes
 157        would be removed.
 158
 159-s <strategy>::
 160--strategy=<strategy>::
 161        When merging notes, resolve notes conflicts using the given
 162        strategy. The following strategies are recognized: "manual"
 163        (default), "ours", "theirs", "union" and "cat_sort_uniq".
 164        See the "NOTES MERGE STRATEGIES" section below for more
 165        information on each notes merge strategy.
 166
 167--commit::
 168        Finalize an in-progress 'git notes merge'. Use this option
 169        when you have resolved the conflicts that 'git notes merge'
 170        stored in .git/NOTES_MERGE_WORKTREE. This amends the partial
 171        merge commit created by 'git notes merge' (stored in
 172        .git/NOTES_MERGE_PARTIAL) by adding the notes in
 173        .git/NOTES_MERGE_WORKTREE. The notes ref stored in the
 174        .git/NOTES_MERGE_REF symref is updated to the resulting commit.
 175
 176--abort::
 177        Abort/reset a in-progress 'git notes merge', i.e. a notes merge
 178        with conflicts. This simply removes all files related to the
 179        notes merge.
 180
 181-q::
 182--quiet::
 183        When merging notes, operate quietly.
 184
 185-v::
 186--verbose::
 187        When merging notes, be more verbose.
 188        When pruning notes, report all object names whose notes are
 189        removed.
 190
 191
 192DISCUSSION
 193----------
 194
 195Commit notes are blobs containing extra information about an object
 196(usually information to supplement a commit's message).  These blobs
 197are taken from notes refs.  A notes ref is usually a branch which
 198contains "files" whose paths are the object names for the objects
 199they describe, with some directory separators included for performance
 200reasons footnote:[Permitted pathnames have the form
 201'ab'`/`'cd'`/`'ef'`/`'...'`/`'abcdef...': a sequence of directory
 202names of two hexadecimal digits each followed by a filename with the
 203rest of the object ID.].
 204
 205Every notes change creates a new commit at the specified notes ref.
 206You can therefore inspect the history of the notes by invoking, e.g.,
 207`git log -p notes/commits`.  Currently the commit message only records
 208which operation triggered the update, and the commit authorship is
 209determined according to the usual rules (see linkgit:git-commit[1]).
 210These details may change in the future.
 211
 212It is also permitted for a notes ref to point directly to a tree
 213object, in which case the history of the notes can be read with
 214`git log -p -g <refname>`.
 215
 216
 217NOTES MERGE STRATEGIES
 218----------------------
 219
 220The default notes merge strategy is "manual", which checks out
 221conflicting notes in a special work tree for resolving notes conflicts
 222(`.git/NOTES_MERGE_WORKTREE`), and instructs the user to resolve the
 223conflicts in that work tree.
 224When done, the user can either finalize the merge with
 225'git notes merge --commit', or abort the merge with
 226'git notes merge --abort'.
 227
 228"ours" automatically resolves conflicting notes in favor of the local
 229version (i.e. the current notes ref).
 230
 231"theirs" automatically resolves notes conflicts in favor of the remote
 232version (i.e. the given notes ref being merged into the current notes
 233ref).
 234
 235"union" automatically resolves notes conflicts by concatenating the
 236local and remote versions.
 237
 238"cat_sort_uniq" is similar to "union", but in addition to concatenating
 239the local and remote versions, this strategy also sorts the resulting
 240lines, and removes duplicate lines from the result. This is equivalent
 241to applying the "cat | sort | uniq" shell pipeline to the local and
 242remote versions. This strategy is useful if the notes follow a line-based
 243format where one wants to avoid duplicated lines in the merge result.
 244Note that if either the local or remote version contain duplicate lines
 245prior to the merge, these will also be removed by this notes merge
 246strategy.
 247
 248
 249EXAMPLES
 250--------
 251
 252You can use notes to add annotations with information that was not
 253available at the time a commit was written.
 254
 255------------
 256$ git notes add -m 'Tested-by: Johannes Sixt <j6t@kdbg.org>' 72a144e2
 257$ git show -s 72a144e
 258[...]
 259    Signed-off-by: Junio C Hamano <gitster@pobox.com>
 260
 261Notes:
 262    Tested-by: Johannes Sixt <j6t@kdbg.org>
 263------------
 264
 265In principle, a note is a regular Git blob, and any kind of
 266(non-)format is accepted.  You can binary-safely create notes from
 267arbitrary files using 'git hash-object':
 268
 269------------
 270$ cc *.c
 271$ blob=$(git hash-object -w a.out)
 272$ git notes --ref=built add -C "$blob" HEAD
 273------------
 274
 275Of course, it doesn't make much sense to display non-text-format notes
 276with 'git log', so if you use such notes, you'll probably need to write
 277some special-purpose tools to do something useful with them.
 278
 279
 280CONFIGURATION
 281-------------
 282
 283core.notesRef::
 284        Notes ref to read and manipulate instead of
 285        `refs/notes/commits`.  Must be an unabbreviated ref name.
 286        This setting can be overridden through the environment and
 287        command line.
 288
 289notes.displayRef::
 290        Which ref (or refs, if a glob or specified more than once), in
 291        addition to the default set by `core.notesRef` or
 292        'GIT_NOTES_REF', to read notes from when showing commit
 293        messages with the 'git log' family of commands.
 294        This setting can be overridden on the command line or by the
 295        'GIT_NOTES_DISPLAY_REF' environment variable.
 296        See linkgit:git-log[1].
 297
 298notes.rewrite.<command>::
 299        When rewriting commits with <command> (currently `amend` or
 300        `rebase`), if this variable is `false`, git will not copy
 301        notes from the original to the rewritten commit.  Defaults to
 302        `true`.  See also "`notes.rewriteRef`" below.
 303+
 304This setting can be overridden by the 'GIT_NOTES_REWRITE_REF'
 305environment variable.
 306
 307notes.rewriteMode::
 308        When copying notes during a rewrite, what to do if the target
 309        commit already has a note.  Must be one of `overwrite`,
 310        `concatenate`, and `ignore`.  Defaults to `concatenate`.
 311+
 312This setting can be overridden with the `GIT_NOTES_REWRITE_MODE`
 313environment variable.
 314
 315notes.rewriteRef::
 316        When copying notes during a rewrite, specifies the (fully
 317        qualified) ref whose notes should be copied.  May be a glob,
 318        in which case notes in all matching refs will be copied.  You
 319        may also specify this configuration several times.
 320+
 321Does not have a default value; you must configure this variable to
 322enable note rewriting.
 323+
 324Can be overridden with the 'GIT_NOTES_REWRITE_REF' environment variable.
 325
 326
 327ENVIRONMENT
 328-----------
 329
 330'GIT_NOTES_REF'::
 331        Which ref to manipulate notes from, instead of `refs/notes/commits`.
 332        This overrides the `core.notesRef` setting.
 333
 334'GIT_NOTES_DISPLAY_REF'::
 335        Colon-delimited list of refs or globs indicating which refs,
 336        in addition to the default from `core.notesRef` or
 337        'GIT_NOTES_REF', to read notes from when showing commit
 338        messages.
 339        This overrides the `notes.displayRef` setting.
 340+
 341A warning will be issued for refs that do not exist, but a glob that
 342does not match any refs is silently ignored.
 343
 344'GIT_NOTES_REWRITE_MODE'::
 345        When copying notes during a rewrite, what to do if the target
 346        commit already has a note.
 347        Must be one of `overwrite`, `concatenate`, and `ignore`.
 348        This overrides the `core.rewriteMode` setting.
 349
 350'GIT_NOTES_REWRITE_REF'::
 351        When rewriting commits, which notes to copy from the original
 352        to the rewritten commit.  Must be a colon-delimited list of
 353        refs or globs.
 354+
 355If not set in the environment, the list of notes to copy depends
 356on the `notes.rewrite.<command>` and `notes.rewriteRef` settings.
 357
 358
 359Author
 360------
 361Written by Johannes Schindelin <johannes.schindelin@gmx.de> and
 362Johan Herland <johan@herland.net>
 363
 364Documentation
 365-------------
 366Documentation by Johannes Schindelin and Johan Herland
 367
 368GIT
 369---
 370Part of the linkgit:git[7] suite