Setup and Config
Getting and Creating Projects
Basic Snapshotting
Branching and Merging
Sharing and Updating Projects
Inspection and Comparison
Patching
Debugging
External Systems
Server Admin
Guides
- gitattributes
- Command-line interface conventions
- Everyday Git
- Frequently Asked Questions (FAQ)
- Glossary
- Hooks
- gitignore
- gitmodules
- Revisions
- Submodules
- Tutorial
- Workflows
- All guides...
Administration
Plumbing Commands
- 2.50.1 → 2.53.0 no changes
-
2.50.0
2025-06-16
- 2.49.1 no changes
-
2.49.0
2025-03-14
- 2.48.1 → 2.48.2 no changes
-
2.48.0
2025-01-10
- 2.44.1 → 2.47.3 no changes
-
2.44.0
2024-02-23
- 2.43.1 → 2.43.7 no changes
-
2.43.0
2023-11-20
- 2.42.1 → 2.42.4 no changes
-
2.42.0
2023-08-21
- 2.38.1 → 2.41.3 no changes
-
2.38.0
2022-10-02
- 2.29.1 → 2.37.7 no changes
-
2.29.0
2020-10-19
- 2.25.1 → 2.28.1 no changes
-
2.25.0
2020-01-13
- 2.22.1 → 2.24.4 no changes
-
2.22.0
2019-06-07
- 2.19.1 → 2.21.4 no changes
-
2.19.0
2018-09-10
- 2.17.0 → 2.18.5 no changes
-
2.16.6
2019-12-06
- 2.15.4 no changes
-
2.14.6
2019-12-06
- 2.10.5 → 2.13.7 no changes
-
2.9.5
2017-07-30
-
2.8.6
2017-07-30
- 2.7.6 no changes
-
2.6.7
2017-05-05
- 2.4.12 → 2.5.6 no changes
-
2.3.10
2015-09-28
- 2.1.4 → 2.2.3 no changes
-
2.0.5
2014-12-17
СИНОПСИС
gitnotes[list[<object>]]gitnotesadd[-f] [--allow-empty] [--[no-]separator|--separator=<paragraph-break>] [--[no-]stripspace] [-F<file> |-m<msg> | (-c|-C) <object>] [-e] [<object>]gitnotescopy[-f] (--stdin| <from-object> [<to-object>] )gitnotesappend[--allow-empty] [--[no-]separator|--separator=<paragraph-break>] [--[no-]stripspace] [-F<file> |-m<msg> | (-c|-C) <object>] [-e] [<object>]gitnotesedit[--allow-empty] [<object>] [--[no-]stripspace]gitnotesshow[<object>]gitnotesmerge[-v|-q] [-s<strategy> ] <notes-ref>gitnotesmerge--commit[-v|-q]gitnotesmerge--abort[-v|-q]gitnotesremove[--ignore-missing] [--stdin] [<object>…]gitnotesprune[-n] [-v]gitnotesget-ref
ОПИС
Додає, видаляє або читає нотатки, прикріплені до обʼєктів, не торкаючись самих обʼєктів.
Зазвичай нотатки зберігаються та зчитуються з refs/notes/commits, але цю стандартну поведінку можна змінити. Дивіться розділи ПАРАМЕТРИ, КОНФІГУРАЦІЯ та СЕРЕДОВИЩЕ нижче. Якщо це посилання не існує, воно буде непомітно створено, коли вперше знадобиться для зберігання нотатки.
Типове використання нотаток — доповнення повідомлення коміту без зміни самого коміту. Нотатки можна відобразити за допомогою git log разом з оригінальним повідомленням коміту. Щоб відрізнити ці нотатки від повідомлення, що зберігається в обʼєкті коміту, нотатки мають відступ, як і повідомлення, після рядка без відступу "Notes (<refname>):" (або "Notes:" для refs/notes/commits).
Нотатки також можна додавати до латок, підготовлених за допомогою git format-patch, використовуючи опцію --notes. Такі нотатки додаються як коментар до латки після роздільника з трьох дефісів.
Щоб змінити, які нотатки відображаються git log, дивіться обговорення notes.displayRef у КОНФІГУРАЦІЯ.
Дивіться конфігурацію notes.rewrite.<command> для способу перенесення нотаток між командами, які перезаписують коміти.
ПІДКОМАНДИ
-
list -
Виводить список обʼєктів нотаток для заданого обʼєкта. Якщо обʼєкт не вказано, показує список усіх обʼєктів нотаток та обʼєктів, які вони анотують (у форматі "<обʼєкт-нотатки> <анотований-обʼєкт>"). Це підкоманда є стандартною, якщо підкоманду не вказано.
-
add -
Додає нотатки для заданого обʼєкта (зазвичай
HEAD). Переривається, якщо обʼєкт вже має нотатки (використовуйте-fдля перезапису наявних нотаток). Однак, якщо ви використовуєтеaddінтерактивно (використовуючи редактор для надання вмісту нотаток), то замість переривання наявні нотатки будуть відкриті в редакторі (як підкомандаedit). Якщо ви вкажете кілька-mта-F, між повідомленнями буде вставлено порожній рядок. Використовуйте опцію--separatorдля вставки інших роздільників. Ви можете використовувати-eдля інтерактивного редагування та точного налаштування повідомлення(й), наданих з опцій-mта-F, перед додаванням нотатки. -
copy -
Копіює нотатки з першого обʼєкта на другий обʼєкт (зазвичай
HEAD). Переривається, якщо другий обʼєкт вже має нотатки, або якщо перший обʼєкт їх не має (використовуйте-f, щоб перезаписати наявні нотатки на другий обʼєкт). Ця підкоманда еквівалентна:gitnotesadd[-f]-C$(gitnoteslist<з-обʼєкта>) <до-обʼєкта>У режимі
--stdinприймає рядки у форматі<from-object> SP <to-object> [ SP <rest> ] LF
на стандартному вводі та копіює нотатки з кожного <from-object> до відповідного <to-object>. (Необовʼязковий <rest> ігнорується, щоб команда могла прочитати вхідні дані, передані гачку
post-rewrite.)--stdinне можна поєднувати з іменами обʼєктів, заданими в командному рядку. -
append -
Додає нове(і) повідомлення(а), задане(і) опціями
-mабо-F, до наявної нотатки, або додає їх як нову нотатку, якщо такої не існує, для обʼєкта (зазвичайHEAD). Під час додавання до наявної нотатки перед кожним новим повідомленням додається порожній рядок як роздільник між абзацами. Роздільник можна налаштувати за допомогою опції--separator. Редагуйте нотатки, які потрібно додавати, задані опціями-mта-F, за допомогою-e, інтерактивно (за допомогою редактора) перед додаванням нотатки. -
edit -
Редагування нотатки для вказаного обʼєкта (зазвичай
HEAD). -
show -
Показ нотатки для вказаного обʼєкта (зазвичай
HEAD). -
merge -
Обʼєднання вказаних посилань нотаток у посилання поточної нотатки. Команда спробує обʼєднати зміни, внесені вказаним посиланням на нотатки ("remote") з моменту злиття (якщо такі є), з поточним посиланням на нотатки ("local").
Якщо виникають конфлікти, а стратегія автоматичного вирішення нотаток з конфліктами (див. розділ "СТРАТЕГІЇ ЗЛИТТЯ НОТАТОК") не вказана, використовується
manualрезолвер. Цей резолвер перевіряє нотатки з конфліктами у спеціальному робочому дереві (.git/NOTES_MERGE_WORKTREE) та доручає користувачеві вручну вирішити конфлікти там. Після завершення користувач може або завершити злиття за допомогоюgitnotesmerge--commit, або перервати злиття за допомогоюgitnotesmerge--abort. -
remove -
Видаляє нотатки для вказаних обʼєктів (зазвичай
HEAD). Якщо в командному рядку вказано нуль або один обʼєкт, це еквівалентно вказівці порожнього повідомлення нотатки для підкомандиedit.У режимі
--stdinтакож видаляються імена обʼєктів, що надаються у стандартному вводі. Іншими словами,--stdinможна поєднувати з іменами обʼєктів з командного рядка. -
prune -
Видаляє всі нотатки для обʼєктів що не існують або які є недоступними.
-
get-ref -
Виводить поточне посилання на нотатки. Це забезпечує простий спосіб отримання поточного посилання на нотатки (наприклад, зі скриптів).
ОПЦІЇ
-
-f -
--force -
Під час додавання нотаток до обʼєкта, який уже має нотатки, перезаписує наявні нотатки (замість переривання роботи).
-
-m<msg> -
--message=<повідомлення> -
Використовує надане повідомлення нотатки (замість запиту). Якщо задано кілька опцій
-m, їхні значення обʼєднуються в окремі абзаци. -
-F<файл> -
--file=<файл> -
Бере повідомлення нотатки з вказаного файлу. Використовуйте
-, щоб прочитати повідомлення нотатки зі стандартного вводу. -
-C<обʼєкт> -
--reuse-message=<обʼєкт> -
Використовує зазначений blob-обʼєкт (наприклад, іншу нотатку) як повідомлення нотатки. (Використовуйте
gitnotescopy<object> для копіювання нотаток між обʼєктами.) Мається на увазі--no-stripspace, оскільки стандартна поведінка полягає в дослівному копіюванні повідомлення. -
-c<обʼєкт> -
--reedit-message=<обʼєкт> -
Подібно до
-C, але з-cвикликається редактор, щоб користувач міг додатково редагувати повідомлення нотатки. -
--allow-empty -
Дозволяє збереження порожнього обʼєкта нотатки. Стандартна поведінка — автоматичне видалення порожніх нотаток.
-
--separator=<paragraph-break> -
--separator -
--no-separator -
Визначає рядок, який використовуватиметься як власний роздільник між абзацами (за потреби в кінці додається символ нового рядка). У випадку
--no-separator, роздільники між абзацами не додаватимуться. Типово використовується порожній рядок. -
--stripspace -
--no-stripspace -
Очищення від пробілів. Зокрема (див. git-stripspace[1]):
-
видаляє пробіли в кінці всіх рядків
-
згортає кілька послідовних порожніх рядків в один порожній рядок
-
видаляє порожні рядки на початку та в кінці вхідних даних
-
за потреби додає відсутній символ \n до останнього рядка.
--stripspaceє стандартною поведінкою, за винятком-C/--reuse-message. Однак майте на увазі, що це залежить від порядку подібних опцій. Наприклад, для-C<обʼєкт>-m<повідомлення> буде використано--stripspace, оскільки стандартне значення для-mзамінює попереднє-C. Це відоме обмеження, яке може бути виправлено в майбутньому. -
-
--ref=<ref> -
Керування деревом нотаток у <ref>. Замінює
GIT_NOTES_REFта конфігураціюcore.notesRef. Посилання вказує повну назву посилання, якщо воно починається зrefs/notes/; якщо воно починається зnotes/, тоrefs/, а в іншому випадку, для формування повної назви посилання додається префіксrefs/notes/. -
--ignore-missing -
Не вважати помилкою запит на видалення нотаток з обʼєкта, у якого немає нотаток.
-
--stdin -
Є дійсним лише для
removeтаcopy. Див. відповідні підкоманди. -
-n -
--dry-run -
Не видаляє нічого; просто повідомляє назви обʼєктів, нотатки яких будуть видалені.
-
-s<стратегія> -
--strategy=<стратегія> -
Під час об’єднання нотаток розвʼязує конфлікти нотаток, використовуючи задану стратегію. Розпізнаються такі стратегії:
manual(стандартно),ours,theirs,unionтаcat_sort_uniq. Цей параметр замінює налаштування конфігураціїnotes.mergeStrategy. Див. розділ «СТРАТЕГІЇ ОБʼЄДНАННЯ НОТАТОК» нижче для отримання додаткової інформації про кожну стратегію обʼєднання нотаток. -
--commit -
Завершує поточне злиття
gitnotesmerge. Використовуйте цю опцію, коли ви розвʼязали конфлікти, якіgitnotesmergeзберігає в.git/NOTES_MERGE_WORKTREE. Виправляє коміт часткового злиття, створенийgitnotesmerge(зберігається в.git/NOTES_MERGE_PARTIAL), додаючи нотатки в.git/NOTES_MERGE_WORKTREE. Посилання на нотатки, що зберігається в symref.git/NOTES_MERGE_REF, оновлюється до результуючого коміту. -
--abort -
Перериває роботу/скидає злиття в процесі
gitnotesmerge, тобто коли відбувається злиття нотаток з конфліктами. Просто видаляє всі файли, повʼязані зі злиттям нотаток. -
-q -
--quiet -
Під час обʼєднання нотаток працює тихо.
-
-v -
--verbose -
Під час об’єднання нотаток будьте докладнішими. Під час видалення нотаток повідомляйте про всі назви об’єктів, нотатки яких видалено.
ОБГОВОРЕННЯ
Нотатки коміту — це блоби, що містять додаткову інформацію про обʼєкт (зазвичай інформацію, що доповнює повідомлення коміту). Ці блоби беруться з посилань на нотатки. Посилання на нотатки зазвичай є гілкою, яка містить «файли», шляхи до яких є іменами обʼєктів, які вони описують, з деякими роздільниками тек, включеними з міркувань продуктивності (примітка: [Дозволені шляхи мають вигляд bf/fe/30/…/680d5a…: послідовність імен тек з двох шістнадцяткових цифр кожна, за якими йде імʼя файлу з рештою ідентифікатора обʼєкта.].
Кожна зміна нотаток створює новий коміт за вказаним посиланням на нотатки. Таким чином, ви можете перевірити історію нотаток, викликавши, наприклад, git log -p notes/commits. Наразі повідомлення про коміт записує лише те, яка операція викликала оновлення, а авторство коміта визначається відповідно до звичайних правил (див. git-commit[1]). Ці деталі можуть змінитися в майбутньому.
Також дозволено, щоб посилання на нотатки вказувало безпосередньо на обʼєкт дерева, і в цьому випадку історію нотаток можна прочитати за допомогою git log -p -g <refname>.
СТРАТЕГІЇ ОБʼЄДНАННЯ НОТАТОК
Стандартною стратегією обʼєднання нотаток є manual, яка перевіряє нотатки з конфліктами у спеціальному робочому дереві для вирішення конфліктів нотаток (.git/NOTES_MERGE_WORKTREE) та дає користувачеві інструкції щодо розвʼязання конфліктів у цьому робочому дереві. Після завершення користувач може або завершити обʼєднання за допомогою git notes merge --commit, або перервати його за допомогою git notes merge --abort.
Користувачі можуть вибрати стратегію автоматичного обʼєднання з наступних, використовуючи опцію -s/--strategy або налаштувавши notes.mergeStrategy відповідно:
ours автоматично розвʼязує конфліктні нотатки на користь локальної версії (тобто поточного посилання на нотатки).
theirs автоматично розвʼязує конфлікти нотаток на користь віддаленої версії (тобто вказане посилання на нотатки обʼєднується з поточним посиланням на нотатки).
union автоматично розвʼязує конфлікти нотаток шляхом обʼєднання локальної та віддаленої версій.
cat_sort_uniq схожа на union, але окрім обʼєднання локальної та віддаленої версій, ця стратегія також сортує результуючі рядки та видаляє дублікати рядків з результату. Це еквівалентно застосуванню конвеєра оболонки "cat | sort | uniq" до локальної та віддаленої версій. Ця стратегія корисна, якщо нотатки дотримуються формату на основі рядків, де потрібно уникнути дублікатів рядків у результаті злиття. Зверніть увагу, що якщо локальна або віддалена версія містять дублікати рядків до злиття, вони також будуть видалені цією стратегією злиття нотаток.
ПРИКЛАДИ
Ви можете використовувати нотатки, щоб додавати анотації з інформацією, яка не була доступна на момент написання опису коміту.
$ 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>
В принципі, нотатка — це звичайний Git-блоб, і приймається будь-який (не)формат. Ви можете безпечно створювати нотатки з довільних файлів у бінарному коді за допомогою git hash-object:
$ cc *.c $ blob=$(git hash-object -w a.out) $ git notes --ref=built add --allow-empty -C "$blob" HEAD
(Ви не можете просто використовувати git notes --ref=built add -F a.out HEAD, оскільки це небезпечно для двійкового коду.) Звичайно, немає сенсу відображати нотатки у нетекстовому форматі за допомогою git log, тому, якщо ви використовуєте такі нотатки, вам, ймовірно, доведеться написати спеціальні інструменти, щоб зробити з ними щось корисне.
КОНФІГУРАЦІЯ
Все, що знаходиться вище цього рядка в цьому розділі, не включено до документації git-config[1]. Наступний вміст такий самий, як і той, що знаходиться там:
-
notes.mergeStrategy -
Яку стратегію обʼєднання вибрати у якості стандартної під час розвʼязання конфліктів у нотатках. Може бути одним зі значень:
manual,ours,theirs,unionабоcat_sort_uniq. Стандартним значенням єmanual. Докладнішу інформацію про кожну стратегію див. у розділі «СТРАТЕГІЇ ОБ’ЄДНАННЯ НОТАТОК» документації git-notes[1].Цю настройку можна замінити, передавши параметр
--strategyу командному рядку git-notes[1]. -
notes.<name>.mergeStrategy -
Яку стратегію злиття обрати під час злиття нотаток у
refs/notes/<name>. Цей параметр замінює більш загальний параметрnotes.mergeStrategy. Докладнішу інформацію про доступні стратегії див. у розділі «СТРАТЕГІЇ ЗЛИТТЯ НОТАТОК» в git-notes[1]. -
notes.displayRef -
Який ref (або refs, якщо вказано загальний параметр або кілька разів), крім стандартного, заданого за допомогою
core.notesRefабоGIT_NOTES_REF, слід використовувати для зчитування приміток під час показу повідомлень про коміти за допомогою команд із сімействаgitlog.Це налаштування можна замінити за допомогою змінної середовища
GIT_NOTES_DISPLAY_REF, яка має містити список ref або glob, розділених двокрапкою.Для посилань, яких не існує, буде видано попередження, але глобальний обʼєкт, який не відповідає жодному посиланню, буде проігнорований.
Це налаштування можна вимкнути за допомогою опції
--no-notesу сімействі команд git-log[1] або за допомогою опції--notes=<ref>, яку підтримують ці команди.Фактичне значення
core.notesRef(яке, можливо, заміненоGIT_NOTES_REF) також неявним чином додається до списку refs для показу. -
notes.rewrite.<command> -
Під час перезапису комітів за допомогою <команди> (наразі
amendабоrebase), якщо ця змінна має значенняfalse, git не копіюватиме примітки з оригінального коміту до перезаписаного. Стандартне значення —true. Див. такожnotes.rewriteRefнижче.Це налаштування можна замінити за допомогою змінної середовища
GIT_NOTES_REWRITE_REF, яка має містити список refs або globs, розділених двокрапкою. -
notes.rewriteMode -
Під час копіювання приміток під час перезапису (див. опцію
notes.rewrite.<command>) визначає, що робити, якщо цільовий коміт уже містить примітку. Може приймати значенняoverwrite,concatenate,cat_sort_uniqабоignore. Стандартним значенням єconcatenate.Це налаштування можна замінити за допомогою змінної середовища
GIT_NOTES_REWRITE_MODE. -
notes.rewriteRef -
Під час копіювання нотаток у процесі перезапису цей параметр визначає (повністю кваліфікований) ref, нотатки якого слід скопіювати. Він може мати вигляд шаблону, і в цьому випадку будуть скопійовані нотатки з усіх відповідних ref. Цей параметр можна вказати кілька разів.
Ця змінна не має стандартного значення; щоб увімкнути перезапис приміток, її потрібно налаштувати. Встановіть для неї значення
refs/notes/commits, щоб увімкнути перезапис стандартних приміток до комітів.Це значення можна замінити за допомогою змінної середовища
GIT_NOTES_REWRITE_REF. Детальніше про формат цієї змінної див. у розділіnotes.rewrite.<command> вище.
НАВКОЛИШНЄ СЕРЕДОВИЩЕ
-
GIT_NOTES_REF -
З якого посилання маніпулювати нотатками, замість
refs/notes/commits. Це замінює налаштуванняcore.notesRef. -
GIT_NOTES_DISPLAY_REF -
Список посилань або глобальних елементів, розділених двокрапками, що вказує, з яких посилань, окрім стандартного значення
core.notesRefабоGIT_NOTES_REF, зчитувати нотатки під час відображення повідомлень комітів. Замінює налаштуванняnotes.displayRef.Для посилань, яких не існує, буде видано попередження, але глобальний обʼєкт, який не відповідає жодному посиланню, буде проігнорований.
-
GIT_NOTES_REWRITE_MODE -
Що робити, якщо цільовий коміт вже має нотатку під час копіювання нотаток під час перезапису? Має бути одне з налаштувань
overwrite,concatenate,cat_sort_uniqабоignore. Замінює налаштуванняcore.rewriteMode. -
GIT_NOTES_REWRITE_REF -
Під час переписування комітів, які нотатки копіювати з оригіналу до переписаного коміту. Має бути список посилань або глобів, розділених двокрапками.
Якщо не встановлено в середовищі, список нотаток для копіювання залежить від налаштувань
notes.rewrite.<команда> таnotes.rewriteRef.
GIT
Частина набору git[1]