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