git-notes(1)
============

NAME
----
git-notes - Add or inspect object notes

SYNOPSIS
--------
[synopsis]
git notes [list [<object>]]
git notes add [-f] [--allow-empty] [--[no-]separator | --separator=<paragraph-break>] [--[no-]stripspace] [-F <file> | -m <msg> | (-c | -C) <object>] [-e] [<object>]
git notes copy [-f] ( --stdin | <from-object> [<to-object>] )
git notes append [--allow-empty] [--[no-]separator | --separator=<paragraph-break>] [--[no-]stripspace] [-F <file> | -m <msg> | (-c | -C) <object>] [-e] [<object>]
git notes edit [--allow-empty] [<object>] [--[no-]stripspace]
git notes show [<object>]
git notes merge [-v | -q] [-s <strategy> ] <notes-ref>
git notes merge --commit [-v | -q]
git notes merge --abort [-v | -q]
git notes remove [--ignore-missing] [--stdin] [<object>...]
git notes prune [-n] [-v]
git notes get-ref


DESCRIPTION
-----------
Adds, removes, or reads notes attached to objects, without touching
the objects themselves.

By default, notes are saved to and read from `refs/notes/commits`, but
this default can be overridden.  See the OPTIONS, CONFIGURATION, and
ENVIRONMENT sections below.  If this ref does not exist, it will be
quietly created when it is first needed to store a note.

A typical use of notes is to supplement a commit message without
changing the commit itself. Notes can be shown by `git log` along with
the original commit message. To distinguish these notes from the
message stored in the commit object, the notes are indented like the
message, after an unindented line saying "Notes (_<refname>_):" (or
"Notes:" for `refs/notes/commits`).

Notes can also be added to patches prepared with `git format-patch` by
using the `--notes` option. Such notes are added as a patch commentary
after a three dash separator line.

To change which notes are shown by `git log`, see the
`notes.displayRef` discussion in <<CONFIGURATION,CONFIGURATION>>.

See the `notes.rewrite.<command>` configuration for a way to carry
notes across commands that rewrite commits.


SUBCOMMANDS
-----------

`list`::
	List the notes object for a given object. If no object is
	given, show a list of all note objects and the objects they
	annotate (in the format "`<note-object> <annotated-object>`").
	This is the default subcommand if no subcommand is given.

`add`::
	Add notes for a given object (defaults to `HEAD`). Abort if the
	object already has notes (use `-f` to overwrite existing notes).
	However, if you're using `add` interactively (using an editor
	to supply the notes contents), then - instead of aborting -
	the existing notes will be opened in the editor (like the `edit`
	subcommand). If you specify multiple `-m` and `-F`, a blank
	line will be inserted between the messages. Use the `--separator`
	option to insert other delimiters. You can use `-e` to edit and
	fine-tune the message(s) supplied from `-m` and `-F` options
	interactively (using an editor) before adding the note.

`copy`::
	Copy the notes for the first object onto the second object (defaults to
	`HEAD`). Abort if the second object already has notes, or if the first
	object has none (use `-f` to overwrite existing notes to the
	second object). This subcommand is equivalent to:
	`git notes add [-f] -C $(git notes list <from-object>) <to-object>`
+
In `--stdin` mode, take lines in the format
+
----------
<from-object> SP <to-object> [ SP <rest> ] LF
----------
+
on standard input, and copy the notes from each _<from-object>_ to its
corresponding _<to-object>_.  (The optional _<rest>_ is ignored so that
the command can read the input given to the `post-rewrite` hook.)
+
`--stdin` cannot be combined with object names given on the command
line.

`append`::
	Append new message(s) given by `-m` or `-F` options to an
	existing note, or add them as a new note if one does not
	exist, for the object (defaults to `HEAD`).  When appending to
	an existing note, a blank line is added before each new
	message as an inter-paragraph separator.  The separator can
	be customized with the `--separator` option.
	Edit the notes to be appended given by `-m` and `-F` options with
	`-e` interactively (using an editor) before appending the note.

`edit`::
	Edit the notes for a given object (defaults to `HEAD`).

`show`::
	Show the notes for a given object (defaults to `HEAD`).

`merge`::
	Merge the given notes ref into the current notes ref.
	This will try to merge the changes made by the given
	notes ref (called "remote") since the merge-base (if
	any) into the current notes ref (called "local").
+
If conflicts arise and a strategy for automatically resolving
conflicting notes (see the "NOTES MERGE STRATEGIES" section) is not given,
the `manual` resolver is used. This resolver checks out the
conflicting notes in a special worktree (`.git/NOTES_MERGE_WORKTREE`),
and instructs the user to manually resolve the conflicts there.
When done, the user can either finalize the merge with
`git notes merge --commit`, or abort the merge with
`git notes merge --abort`.

`remove`::
	Remove the notes for given objects (defaults to `HEAD`). When
	giving zero or one object from the command line, this is
	equivalent to specifying an empty note message to
	the `edit` subcommand.
+
In `--stdin` mode, also remove the object names given on standard
input. In other words, `--stdin` can be combined with object names from
the command line.

`prune`::
	Remove all notes for non-existing/unreachable objects.

`get-ref`::
	Print the current notes ref. This provides an easy way to
	retrieve the current notes ref (e.g. from scripts).

OPTIONS
-------
`-f`::
`--force`::
	When adding notes to an object that already has notes,
	overwrite the existing notes (instead of aborting).

`-m <msg>`::
`--message=<msg>`::
	Use the given note message (instead of prompting).
	If multiple `-m` options are given, their values
	are concatenated as separate paragraphs.

`-F <file>`::
`--file=<file>`::
	Take the note message from the given file.  Use `-` to
	read the note message from the standard input.

`-C <object>`::
`--reuse-message=<object>`::
	Take the given blob object (for example, another note) as the
	note message. (Use `git notes copy <object>` instead to
	copy notes between objects.)  Implies `--no-stripspace` since
	the default behavior is to copy the message verbatim.

`-c <object>`::
`--reedit-message=<object>`::
	Like `-C`, but with `-c` the editor is invoked, so that
	the user can further edit the note message.

`--allow-empty`::
	Allow an empty note object to be stored. The default behavior is
	to automatically remove empty notes.

`--separator=<paragraph-break>`::
`--separator`::
`--no-separator`::
	Specify a string used as a custom inter-paragraph separator
	(a newline is added at the end as needed). If `--no-separator`, no
	separators will be added between paragraphs.  Defaults to a blank
	line.

`--stripspace`::
`--no-stripspace`::
	Clean up whitespace. Specifically (see
	linkgit:git-stripspace[1]):
+
--
- remove trailing whitespace from all lines
- collapse multiple consecutive empty lines into one empty line
- remove empty lines from the beginning and end of the input
- add a missing `\n` to the last line if necessary.
--
+
`--stripspace` is the default except for
`-C`/`--reuse-message`. However, keep in mind that this depends on the
order of similar options. For example, for `-C <object> -m<message>`,
`--stripspace` will be used because the default for `-m` overrides the
previous `-C`. This is a known limitation that may be fixed in the
future.

`--ref=<ref>`::
	Manipulate the notes tree in _<ref>_.  This overrides
	`GIT_NOTES_REF` and the `core.notesRef` configuration.  The ref
	specifies the full refname when it begins with `refs/notes/`; when it
	begins with `notes/`, `refs/` and otherwise `refs/notes/` is prefixed
	to form a full name of the ref.

`--ignore-missing`::
	Do not consider it an error to request removing notes from an
	object that does not have notes attached to it.

`--stdin`::
	Only valid for `remove` and `copy`. See the respective subcommands.

`-n`::
`--dry-run`::
	Do not remove anything; just report the object names whose notes
	would be removed.

`-s <strategy>`::
`--strategy=<strategy>`::
	When merging notes, resolve notes conflicts using the given
	strategy. The following strategies are recognized: `manual`
	(default), `ours`, `theirs`, `union` and `cat_sort_uniq`.
	This option overrides the `notes.mergeStrategy` configuration setting.
	See the "NOTES MERGE STRATEGIES" section below for more
	information on each notes merge strategy.

`--commit`::
	Finalize an in-progress `git notes merge`. Use this option
	when you have resolved the conflicts that `git notes merge`
	stored in `.git/NOTES_MERGE_WORKTREE`. This amends the partial
	merge commit created by `git notes merge` (stored in
	`.git/NOTES_MERGE_PARTIAL`) by adding the notes in
	`.git/NOTES_MERGE_WORKTREE`. The notes ref stored in the
	`.git/NOTES_MERGE_REF` symref is updated to the resulting commit.

`--abort`::
	Abort/reset an in-progress `git notes merge`, i.e. a notes merge
	with conflicts. This simply removes all files related to the
	notes merge.

`-q`::
`--quiet`::
	When merging notes, operate quietly.

`-v`::
`--verbose`::
	When merging notes, be more verbose.
	When pruning notes, report all object names whose notes are
	removed.


DISCUSSION
----------

Commit notes are blobs containing extra information about an object
(usually information to supplement a commit's message).  These blobs
are taken from notes refs.  A notes ref is usually a branch which
contains "files" whose paths are the object names for the objects
they describe, with some directory separators included for performance
reasons footnote:[Permitted pathnames have the form
'bf'`/`'fe'`/`'30'`/`'...'`/`'680d5a...': a sequence of directory
names of two hexadecimal digits each followed by a filename with the
rest of the object ID.].

Every notes change creates a new commit at the specified notes ref.
You can therefore inspect the history of the notes by invoking, e.g.,
`git log -p notes/commits`.  Currently the commit message only records
which operation triggered the update, and the commit authorship is
determined according to the usual rules (see linkgit:git-commit[1]).
These details may change in the future.

It is also permitted for a notes ref to point directly to a tree
object, in which case the history of the notes can be read with
`git log -p -g <refname>`.


NOTES MERGE STRATEGIES
----------------------

The default notes merge strategy is `manual`, which checks out
conflicting notes in a special work tree for resolving notes conflicts
(`.git/NOTES_MERGE_WORKTREE`), and instructs the user to resolve the
conflicts in that work tree.
When done, the user can either finalize the merge with
`git notes merge --commit`, or abort the merge with
`git notes merge --abort`.

Users may select an automated merge strategy from among the following using
either `-s`/`--strategy` option or configuring `notes.mergeStrategy` accordingly:

`ours` automatically resolves conflicting notes in favor of the local
version (i.e. the current notes ref).

`theirs` automatically resolves notes conflicts in favor of the remote
version (i.e. the given notes ref being merged into the current notes
ref).

`union` automatically resolves notes conflicts by concatenating the
local and remote versions.

`cat_sort_uniq` is similar to `union`, but in addition to concatenating
the local and remote versions, this strategy also sorts the resulting
lines, and removes duplicate lines from the result. This is equivalent
to applying the "cat | sort | uniq" shell pipeline to the local and
remote versions. This strategy is useful if the notes follow a line-based
format where one wants to avoid duplicated lines in the merge result.
Note that if either the local or remote version contain duplicate lines
prior to the merge, these will also be removed by this notes merge
strategy.


EXAMPLES
--------

You can use notes to add annotations with information that was not
available at the time a commit was written.

------------
$ git notes add -m 'Tested-by: Johannes Sixt <j6t@kdbg.org>' 72a144e2
$ git show -s 72a144e
[...]
    Signed-off-by: Junio C Hamano <gitster@pobox.com>

Notes:
    Tested-by: Johannes Sixt <j6t@kdbg.org>
------------

In principle, a note is a regular Git blob, and any kind of
(non-)format is accepted.  You can binary-safely create notes from
arbitrary files using `git hash-object`:

------------
$ cc *.c
$ blob=$(git hash-object -w a.out)
$ git notes --ref=built add --allow-empty -C "$blob" HEAD
------------

(You cannot simply use `git notes --ref=built add -F a.out HEAD`
because that is not binary-safe.)
Of course, it doesn't make much sense to display non-text-format notes
with `git log`, so if you use such notes, you'll probably need to write
some special-purpose tools to do something useful with them.


[[CONFIGURATION]]
CONFIGURATION
-------------

`core.notesRef`::
	Notes ref to read and manipulate instead of
	`refs/notes/commits`.  Must be an unabbreviated ref name.
	This setting can be overridden through the environment and
	command line.

include::includes/cmd-config-section-rest.adoc[]

include::config/notes.adoc[]


ENVIRONMENT
-----------

`GIT_NOTES_REF`::
	Which ref to manipulate notes from, instead of `refs/notes/commits`.
	This overrides the `core.notesRef` setting.

`GIT_NOTES_DISPLAY_REF`::
	Colon-delimited list of refs or globs indicating which refs,
	in addition to the default from `core.notesRef` or
	`GIT_NOTES_REF`, to read notes from when showing commit
	messages.
	This overrides the `notes.displayRef` setting.
+
A warning will be issued for refs that do not exist, but a glob that
does not match any refs is silently ignored.

`GIT_NOTES_REWRITE_MODE`::
	When copying notes during a rewrite, what to do if the target
	commit already has a note.
	Must be one of `overwrite`, `concatenate`, `cat_sort_uniq`, or `ignore`.
	This overrides the `core.rewriteMode` setting.

`GIT_NOTES_REWRITE_REF`::
	When rewriting commits, which notes to copy from the original
	to the rewritten commit.  Must be a colon-delimited list of
	refs or globs.
+
If not set in the environment, the list of notes to copy depends
on the `notes.rewrite.<command>` and `notes.rewriteRef` settings.

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