|  | 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 |