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,OPTIONS>>,
<<CONFIGURATION,CONFIGURATION>>, and <<ENVIRONMENT,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,"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]]
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,"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]]
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]]
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
