| git-notes(1) | 
 | ============ | 
 |  | 
 | NAME | 
 | ---- | 
 | git-notes - Add or inspect object notes | 
 |  | 
 | SYNOPSIS | 
 | -------- | 
 | [verse] | 
 | 'git notes' [list [<object>]] | 
 | 'git notes' add [-f] [--allow-empty] [-F <file> | -m <msg> | (-c | -C) <object>] [<object>] | 
 | 'git notes' copy [-f] ( --stdin | <from-object> <to-object> ) | 
 | 'git notes' append [--allow-empty] [-F <file> | -m <msg> | (-c | -C) <object>] [<object>] | 
 | 'git notes' edit [--allow-empty] [<object>] | 
 | '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" configuration in linkgit:git-log[1]. | 
 |  | 
 | 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). | 
 |  | 
 | copy:: | 
 | 	Copy the notes for the first object onto the second object. | 
 | 	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.) | 
 |  | 
 | append:: | 
 | 	Append to the notes of an existing object (defaults to HEAD). | 
 | 	Creates a new notes object if needed. | 
 |  | 
 | 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. | 
 |  | 
 | 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. | 
 | 	Lines starting with `#` and empty lines other than a | 
 | 	single line between paragraphs will be stripped out. | 
 |  | 
 | -F <file>:: | 
 | --file=<file>:: | 
 | 	Take the note message from the given file.  Use '-' to | 
 | 	read the note message from the standard input. | 
 | 	Lines starting with `#` and empty lines other than a | 
 | 	single line between paragraphs will be stripped out. | 
 |  | 
 | -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.) | 
 |  | 
 | -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. | 
 |  | 
 | --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:: | 
 | 	Also read the object names to remove notes from the standard | 
 | 	input (there is no reason you cannot combine this with object | 
 | 	names from the command line). | 
 |  | 
 | -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 | 
 | 'ab'`/`'cd'`/`'ef'`/`'...'`/`'abcdef...': 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 | 
 | ------------- | 
 |  | 
 | 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. | 
 |  | 
 | notes.mergeStrategy:: | 
 | 	Which merge strategy to choose by default when resolving notes | 
 | 	conflicts.  Must be one of `manual`, `ours`, `theirs`, `union`, or | 
 | 	`cat_sort_uniq`.  Defaults to `manual`.  See "NOTES MERGE STRATEGIES" | 
 | 	section above for more information on each strategy. | 
 | + | 
 | This setting can be overridden by passing the `--strategy` option. | 
 |  | 
 | notes.<name>.mergeStrategy:: | 
 | 	Which merge strategy to choose when doing a notes merge into | 
 | 	refs/notes/<name>.  This overrides the more general | 
 | 	"notes.mergeStrategy".  See the "NOTES MERGE STRATEGIES" section above | 
 | 	for more information on each available strategy. | 
 |  | 
 | notes.displayRef:: | 
 | 	Which ref (or refs, if a glob or specified more than once), in | 
 | 	addition to the default set by `core.notesRef` or | 
 | 	`GIT_NOTES_REF`, to read notes from when showing commit | 
 | 	messages with the 'git log' family of commands. | 
 | 	This setting can be overridden on the command line or by the | 
 | 	`GIT_NOTES_DISPLAY_REF` environment variable. | 
 | 	See linkgit:git-log[1]. | 
 |  | 
 | notes.rewrite.<command>:: | 
 | 	When rewriting commits with <command> (currently `amend` or | 
 | 	`rebase`), if this variable is `false`, git will not copy | 
 | 	notes from the original to the rewritten commit.  Defaults to | 
 | 	`true`.  See also "`notes.rewriteRef`" below. | 
 | + | 
 | This setting can be overridden by the `GIT_NOTES_REWRITE_REF` | 
 | environment variable. | 
 |  | 
 | notes.rewriteMode:: | 
 | 	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`.  Defaults to | 
 | 	`concatenate`. | 
 | + | 
 | This setting can be overridden with the `GIT_NOTES_REWRITE_MODE` | 
 | environment variable. | 
 |  | 
 | notes.rewriteRef:: | 
 | 	When copying notes during a rewrite, specifies the (fully | 
 | 	qualified) ref whose notes should be copied.  May be a glob, | 
 | 	in which case notes in all matching refs will be copied.  You | 
 | 	may also specify this configuration several times. | 
 | + | 
 | Does not have a default value; you must configure this variable to | 
 | enable note rewriting. | 
 | + | 
 | Can be overridden with the `GIT_NOTES_REWRITE_REF` environment variable. | 
 |  | 
 |  | 
 | 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 |