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