GIT-NOTES(1) Git Manual GIT-NOTES(1)

git-notes - افزودن یا بررسی یادداشت‌های متصل به اشیا

git notes [list [<object>]]
git notes add [-f] [--llow-empty] [--R[no-]separator | --parator=<paragraph-break>] [--R[no-]stripspace] [-F <file> | -m <msg> | (-c | -C) <object>] [-e] [<object>]
git notes copy [-f] ( --din | <from-object> [<to-object>] )
git notes append [--llow-empty] [--R[no-]separator | --parator=<paragraph-break>] [--R[no-]stripspace] [-F <file> | -m <msg> | (-c | -C) <object>] [-e] [<object>]
git notes edit [--llow-empty] [<object>] [--R[no-]stripspace]
git notes show [<object>]
git notes merge [-v | -q] [-s <strategy> ] <notes-ref>
git notes merge --ommit [-v | -q]
git notes merge --bort [-v | -q]
git notes remove [--ignore-missing] [--din] [<object>...]
git notes prune [-n] [-v]
git notes get-ref

افزودن، حذف یا خواندن یادداشت‌های پیوست‌شده به اشیا، بدون دستکاری خود اشیا.

به‌طور پیش‌فرض، یادداشت‌ها در refs/notes/commits ذخیره و از آن خوانده می‌شوند، اما این پیش‌فرض قابل تغییر است. به بخش‌های گزینه‌ها، پیکربندی و محیط در زیر مراجعه کنید. اگر این ارجاع وجود نداشته باشد، اولین باری که برای ذخیره یک یادداشت نیاز باشد، بدون سروصدا ایجاد خواهد شد.

یک کاربرد متداول یادداشت‌ها، تکمیل پیام یک کامیت بدون تغییر خود کامیت است. یادداشت‌ها می‌توانند توسط git log به همراه پیام کامیت اصلی نمایش داده شوند. برای متمایز ساختن این یادداشت‌ها از پیام ذخیره‌شده در شیء کامیت، یادداشت‌ها همانند پیام دندانه‌دار می‌شوند، پس از یک سطر بدون دندانه که می‌گوید "Notes (<refname>):" (یا "Notes:" برای refs/notes/commits).

یادداشت‌ها همچنین می‌توانند به وصله‌های آماده‌شده با git format-patch با استفاده از گزینه --0tes اضافه شوند. چنین یادداشت‌هایی به عنوان توضیحات وصله پس از یک خط جداکننده با سه خط تیره درج می‌شوند.

برای تغییر اینکه کدام یادداشت‌ها توسط git log نمایش داده شوند، به بحث notes.displayRef در بخش پیکربندی مراجعه کنید.

برای راهکاری جهت انتقال یادداشت‌ها در دستوراتی که کامیت‌ها را بازنویسی می‌کنند، پیکربندی notes.rewrite.<command> را ببینید.

list

فهرست کردن شیء یادداشت‌ها برای یک شیء داده‌شده. اگر شیئی مشخص نشود، فهرستی از تمام اشیای یادداشت و اشیایی که آن‌ها را حاشیه‌نویسی کرده‌اند نشان می‌دهد (در قالب "<note-object> <annotated-object>"). اگر هیچ زیردستوری داده نشود، این زیردستور پیش‌فرض است.

add

افزودن یادداشت‌ها برای یک شیء داده‌شده (پیش‌فرض HEAD). در صورتی که شیء از قبل دارای یادداشت باشد عملیات لغو می‌شود (از -f برای بازنویسی یادداشت‌های موجود استفاده کنید). با این حال، اگر از add به‌صورت تعاملی استفاده می‌کنید (با استفاده از یک ویرایشگر برای ارائه محتوای یادداشت)، آنگاه به‌جای لغو عملیات، یادداشت‌های موجود در ویرایشگر باز خواهند شد (مانند زیردستور edit). اگر چندین گزینه -m و -F مشخص کنید، یک خط خالی میان پیام‌ها درج خواهد شد. از گزینه --parator برای درج سایر جداکننده‌ها استفاده کنید. می‌توانید از -e برای ویرایش و تنظیم دقیق پیام(های) ارائه‌شده از گزینه‌های -m و -F به صورت تعاملی (با استفاده از ویرایشگر) پیش از افزودن یادداشت استفاده کنید.

copy

کپی کردن یادداشت‌های شیء اول بر روی شیء دوم (پیش‌فرض HEAD). در صورتی که شیء دوم از قبل یادداشت داشته باشد یا شیء اول هیچ یادداشتی نداشته باشد، عملیات لغو می‌شود (از -f برای بازنویسی یادداشت‌های موجود روی شیء دوم استفاده کنید). این زیردستور معادل است با: git notes add [-f] -C $(git notes list <from-object>) <to-object>

در حالت --din، سطرهایی با قالب زیر را:

<from-object> SP <to-object> [ SP <rest> ] LF

از ورودی استاندارد دریافت کرده و یادداشت‌ها را از هر <from-object> به <to-object> متناظر آن کپی می‌کند. (بخش اختیاری <rest> نادیده گرفته می‌شود تا این دستور بتواند ورودی ارائه‌شده به قلاب post-rewrite را بخواند.)

گزینه --din را نمی‌توان با نام‌های اشیای ارائه‌شده در خط فرمان ترکیب کرد.

append

الحاق پیام(های) جدید ارائه‌شده توسط گزینه‌های -m یا -F به یک یادداشت موجود، یا افزودن آن‌ها به عنوان یادداشتی جدید در صورت عدم وجود، برای شیء (پیش‌فرض HEAD). هنگام الحاق به یک یادداشت موجود، یک خط خالی پیش از هر پیام جدید به عنوان جداکننده میان‌پاراگرافی اضافه می‌شود. این جداکننده را می‌توان با گزینه --parator سفارشی کرد. پیش از الحاق یادداشت، پیام‌های ارائه‌شده توسط گزینه‌های -m و -F را می‌توانید با -e به‌صورت تعاملی (با استفاده از یک ویرایشگر) ویرایش کنید.

edit

ویرایش یادداشت‌ها برای شیء داده‌شده (پیش‌فرض HEAD).

show

نمایش یادداشت‌ها برای شیء داده‌شده (پیش‌فرض HEAD).

merge

ادغام ارجاع یادداشت داده‌شده با ارجاع یادداشت‌های جاری. این دستور تلاش می‌کند تغییرات ایجادشده توسط ارجاع یادداشت داده‌شده (به نام "remote") را از زمان پایه ادغام (در صورت وجود) در ارجاع یادداشت‌های جاری (به نام "local") ادغام کند.

در صورت بروز تعارض و عدم تعیین یک استراتژی برای حل خودکار تعارض یادداشت‌ها (بخش "استراتژی‌های ادغام یادداشت‌ها" را ببینید)، حل‌کننده manual (دستی) استفاده می‌شود. این حل‌کننده یادداشت‌های دارای تعارض را در یک درخت کاری ویژه (.git/NOTES_MERGE_WORKTREE) واکشی و آماده می‌کند، و به کاربر دستور می‌دهد تا تعارض‌ها را در آنجا به صورت دستی حل کند. پس از اتمام، کاربر می‌تواند ادغام را با git notes merge --ommit، یا لغو ادغام را با git notes merge --bort انجام دهد.

remove

حذف یادداشت‌ها برای اشیای داده‌شده (پیش‌فرض HEAD). هنگام تعیین صفر یا یک شیء از خط فرمان، این کار معادل تعیین یک پیام یادداشت خالی برای زیردستور edit است.

در حالت --din، نام‌های اشیای ارائه‌شده در ورودی استاندارد را نیز حذف می‌کند. به عبارت دیگر، --din می‌تواند با نام‌های اشیا از خط فرمان ترکیب شود.

prune

حذف تمامی یادداشت‌ها برای اشیای ناموجود یا غیرقابل دسترس.

get-ref

چاپ ارجاع یادداشت‌های جاری. این دستور راهی آسان برای دریافت ارجاع یادداشت‌های جاری (مثلاً از طریق اسکریپت‌ها) فراهم می‌کند.

-f, --rce

هنگام افزودن یادداشت به شیئی که از قبل یادداشت دارد، یادداشت‌های موجود را بازنویسی می‌کند (به‌جای لغو عملیات).

-m <msg>, --ssage=<msg>

استفاده از پیام یادداشت داده‌شده (به‌جای درخواست ورودی از کاربر). در صورت ارائه چند گزینه -m، مقادیر آن‌ها به صورت پاراگراف‌های مجزا به هم متصل می‌شوند.

-F <file>, --le=<file>

دریافت پیام یادداشت از فایل داده‌شده. از - برای خواندن پیام یادداشت از ورودی استاندارد استفاده کنید.

-C <object>, --euse-message=<object>

در نظر گرفتن شیء blob داده‌شده (برای مثال، یک یادداشت دیگر) به عنوان پیام یادداشت. (برای کپی یادداشت‌ها میان اشیا از git notes copy <object> استفاده کنید.) این گزینه مستلزم --0-stripspace است زیرا رفتار پیش‌فرض کپی عین متن پیام است.

-c <object>, --eedit-message=<object>

مانند -C، اما با -c ویرایشگر باز می‌شود تا کاربر بتواند پیام یادداشت را بیشتر ویرایش کند.

--llow-empty

اجازه می‌دهد یک شیء یادداشت خالی ذخیره شود. رفتار پیش‌فرض حذف خودکار یادداشت‌های خالی است.

--parator=<paragraph-break>, --parator, --0-separator

تعیین یک رشته به عنوان جداکننده سفارشی میان‌پاراگرافی (در انتهای آن در صورت نیاز یک خط جدید اضافه می‌شود). در صورت استفاده از --0-separator، هیچ جداکننده‌ای بین پاراگراف‌ها اضافه نخواهد شد. پیش‌فرض یک خط خالی است.

--ripspace, --0-stripspace

پاک‌سازی فاصله‌های خالی (whitespace). به‌طور مشخص (ببینید git-stripspace(1)):
•حذف فاصله‌های خالی انتهایی از تمام خطوط
•ادغام چندین خط خالی متوالی در یک خط خالی
•حذف خطوط خالی از ابتدا و انتهای ورودی
•افزودن یک خط جدید \n گم‌شده به انتهای آخرین خط در صورت نیاز.

گزینه --ripspace حالت پیش‌فرض است به‌جز برای -C/--euse-message. با این حال، به یاد داشته باشید که این به ترتیب گزینه‌های مشابه بستگی دارد؛ برای مثال برای -C <object> -m<message>، گزینه --ripspace استفاده خواهد شد زیرا پیش‌فرض -m بر -C قبلی غلبه می‌کند. این یک محدودیت شناخته‌شده است که ممکن است در آینده برطرف شود.

--ef=<ref>

دستکاری درخت یادداشت‌ها در <ref>. این گزینه بر GIT_NOTES_REF و پیکربندی core.notesRef غلبه می‌کند. این ارجاع زمانی که با refs/notes/ شروع شود نام کامل را مشخص می‌کند؛ هنگامی که با notes/ شروع شود refs/ و در غیر این صورت refs/notes/ به ابتدای آن اضافه می‌شود تا نام کامل ارجاع تشکیل شود.

--ignore-missing

درخواست حذف یادداشت‌ها از شیئی که هیچ یادداشتی به آن متصل نیست را به عنوان خطا در نظر نمی‌گیرد.

--din

فقط برای remove و copy معتبر است. به زیردستورهای مربوطه مراجعه کنید.

-n, --ry-run

چیزی را حذف نمی‌کند؛ فقط نام اشیایی را که یادداشت‌هایشان حذف می‌شود گزارش می‌دهد.

-s <strategy>, --rategy=<strategy>

هنگام ادغام یادداشت‌ها، تعارض‌های یادداشت را با استفاده از استراتژی داده‌شده حل می‌کند. استراتژی‌های زیر شناسایی می‌شوند: manual (پیش‌فرض)، ours، theirs، union و cat_sort_uniq. این گزینه بر تنظیمات پیکربندی notes.mergeStrategy غلبه می‌کند. برای اطلاعات بیشتر در مورد هر یک از استراتژی‌های ادغام یادداشت‌ها، به بخش "استراتژی‌های ادغام یادداشت‌ها" در زیر مراجعه کنید.

--ommit

نهایی‌سازی یک git notes merge در حال انجام. هنگامی که تعارض‌های ذخیره‌شده توسط git notes merge در .git/NOTES_MERGE_WORKTREE را حل کردید از این گزینه استفاده کنید. این گزینه کامیت ادغام جزئی ایجادشده توسط git notes merge (ذخیره‌شده در .git/NOTES_MERGE_PARTIAL) را با افزودن یادداشت‌های موجود در .git/NOTES_MERGE_WORKTREE اصلاح می‌کند. ارجاع یادداشت‌های ذخیره‌شده در ارجاع نمادین .git/NOTES_MERGE_REF به کامیت حاصل به‌روزرسانی می‌شود.

--bort

لغو/بازنشانی یک عملیات git notes merge در حال انجام، یعنی ادغام یادداشت‌های دارای تعارض. این گزینه به‌سادگی تمامی فایل‌های مربوط به ادغام یادداشت‌ها را حذف می‌کند.

-q, --quiet

هنگام ادغام یادداشت‌ها، عملیات را در سکوت انجام می‌دهد.

-v, --

هنگام ادغام یادداشت‌ها، اطلاعات با جزئیات بیشتری نمایش داده می‌شود. هنگام پاک‌سازی یادداشت‌ها (prune)، نام تمام اشیایی را که یادداشت‌هایشان حذف شده گزارش می‌دهد.

یادداشت‌های کامیت، blobهایی حاوی اطلاعات اضافی درباره یک شیء هستند (معمولاً اطلاعاتی برای تکمیل پیام یک کامیت). این blobها از ارجاعات یادداشت گرفته می‌شوند. ارجاع یادداشت معمولاً شاخه‌ای است که شامل "فایل‌هایی" است که مسیرهای آن‌ها همان نام‌های شیء برای اشیایی است که توصیف می‌کنند، به همراه چند جداکننده دایرکتوری که به دلایل کارایی اضافه شده‌اند [1].

هر تغییر در یادداشت‌ها یک کامیت جدید در ارجاع یادداشت‌های مشخص‌شده ایجاد می‌کند. بنابراین می‌توانید با اجرای دستوری مانند git log -p notes/commits تاریخچه یادداشت‌ها را بررسی کنید. در حال حاضر پیام کامیت تنها ثبت می‌کند که کدام عملیات به‌روزرسانی را راه‌اندازی کرده است، و نویسنده کامیت طبق قوانین معمول تعیین می‌شود (به git-commit(1) مراجعه کنید). این جزئیات ممکن است در آینده تغییر کند.

همچنین مجاز است که یک ارجاع یادداشت مستقیماً به یک شیء درخت اشاره کند، که در این صورت تاریخچه یادداشت‌ها را می‌توان با git log -p -g <refname> خواند.

استراتژی پیش‌فرض ادغام یادداشت‌ها manual است، که یادداشت‌های دارای تعارض را در یک درخت کاری ویژه برای حل تعارض‌های یادداشت (.git/NOTES_MERGE_WORKTREE) آماده می‌کند و به کاربر آموزش می‌دهد تا تعارض‌ها را در آن درخت کاری حل کند. پس از اتمام، کاربر می‌تواند ادغام را با git notes merge --ommit نهایی کند یا با git notes merge --bort آن را لغو نماید.

کاربران می‌توانند با استفاده از گزینه -s/--rategy یا پیکربندی مناسب 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>

در اصل، یک یادداشت یک blob معمولی Git است و هر نوع قالبی (یا غیرقالبی) پذیرفته می‌شود. شما می‌توانید با استفاده از git hash-object یادداشت‌هایی ایمن برای داده‌های باینری از فایل‌های دلخواه بسازید:

$ cc *.c
$ blob=$(git hash-object -w a.out)
$ git notes --ef=built add --llow-empty -C "$blob" HEAD

(شما نمی‌توانید به‌سادگی از git notes --ef=built add -F a.out HEAD استفاده کنید زیرا این دستور ایمن در برابر باینری نیست.) البته، نمایش یادداشت‌های غیرمتنی با git log چندان منطقی نیست، بنابراین اگر از چنین یادداشت‌هایی استفاده می‌کنید، احتمالاً باید ابزارهای ویژه‌ای برای انجام کارهای مفید با آن‌ها بنویسید.

core.notesRef

ارجاع یادداشت‌ها برای خواندن و دستکاری به‌جای refs/notes/commits. باید یک نام ارجاع کامل و بدون اختصار باشد. این تنظیم را می‌توان از طریق متغیر محیطی و خط فرمان بازنویسی کرد.

تمام موارد بالاتر از این خط در این بخش از مستندات git-config(1) گنجانده نشده‌اند. محتوایی که در ادامه می‌آید همان چیزی است که در آنجا یافت می‌شود:

notes.mergeStrategy

کدام استراتژی ادغام به‌طور پیش‌فرض هنگام حل تعارض‌های یادداشت انتخاب شود. باید یکی از موارد manual، ours، theirs، union یا cat_sort_uniq باشد. مقدار پیش‌فرض manual است. برای اطلاعات بیشتر در مورد هر استراتژی، بخش "استراتژی‌های ادغام یادداشت‌ها" در git-notes(1) را ببینید.

این تنظیم را می‌توان با ارسال گزینه --rategy به git-notes(1) بازنویسی کرد.

notes.<name>.mergeStrategy

کدام استراتژی ادغام هنگام ادغام یادداشت‌ها در refs/notes/<name> انتخاب شود. این بر گزینه عمومی‌تر notes.mergeStrategy غلبه می‌کند. برای اطلاعات بیشتر در مورد استراتژی‌های موجود، بخش "استراتژی‌های ادغام یادداشت‌ها" در git-notes(1) را ببینید.

notes.displayRef

کدام ارجاع (یا ارجاع‌ها، اگر یک الگو باشد یا بیش از یک بار مشخص شود)، علاوه بر ارجاع پیش‌فرض تنظیم‌شده توسط core.notesRef یا GIT_NOTES_REF، هنگام نمایش پیام‌های کامیت با خانواده دستورات git log برای خواندن یادداشت‌ها استفاده شود.

این تنظیم را می‌توان با متغیر محیطی GIT_NOTES_DISPLAY_REF بازنویسی کرد، که باید فهرستی از ارجاعات یا الگوها باشد که با دونقطه (:) از هم جدا شده‌اند.

برای ارجاعاتی که وجود ندارند هشداری صادر می‌شود، اما الگویی که با هیچ ارجاعی مطابقت ندارد بی‌صدا نادیده گرفته می‌شود.

این تنظیم را می‌توان با گزینه --0-notes در خانواده دستورات git-log(1) یا با گزینه --0tes=<ref> پذیرفته‌شده توسط آن دستورات غیرفعال کرد.

مقدار مؤثر core.notesRef (که احتمالاً توسط GIT_NOTES_REF بازنویسی شده است) نیز به‌طور ضمنی به فهرست ارجاعات نمایشی اضافه می‌شود.

notes.rewrite.<command>

هنگام بازنویسی کامیت‌ها با <command> (در حال حاضر amend یا rebase)، اگر این متغیر false باشد، git یادداشت‌ها را از کامیت اصلی به کامیت بازنویسی‌شده کپی نخواهد کرد. مقدار پیش‌فرض true است. همچنین notes.rewriteRef را در زیر ببینید.

این تنظیم را می‌توان با متغیر محیطی GIT_NOTES_REWRITE_REF بازنویسی کرد، که باید فهرستی از ارجاعات یا الگوهای جداشده با دونقطه باشد.

notes.rewriteMode

هنگام کپی یادداشت‌ها در حین بازنویسی (گزینه notes.rewrite.<command> را ببینید)، تعیین می‌کند اگر کامیت مقصد از قبل یادداشتی داشته باشد چه اقدامی انجام شود. باید یکی از موارد overwrite، concatenate، cat_sort_uniq یا ignore باشد. مقدار پیش‌فرض concatenate است.

این تنظیم را می‌توان با متغیر محیطی GIT_NOTES_REWRITE_MODE بازنویسی کرد.

notes.rewriteRef

هنگام کپی یادداشت‌ها در حین بازنویسی، ارجاع کامل (واجد شرایط) را مشخص می‌کند که یادداشت‌های آن باید کپی شوند. می‌تواند یک الگو (glob) باشد که در این صورت یادداشت‌ها در تمام ارجاعات منطبق کپی خواهند شد. همچنین می‌توانید این پیکربندی را چندین بار مشخص کنید.

مقدار پیش‌فرض ندارد؛ شما باید این متغیر را برای فعال‌سازی بازنویسی یادداشت‌ها پیکربندی کنید. برای فعال‌سازی بازنویسی یادداشت‌های پیش‌فرض کامیت، آن را روی 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.<command> و notes.rewriteRef بستگی دارد.

بخشی از مجموعه git(1)

1.
نام‌های مسیر مجاز دارای فرمت bf/fe/30/.../680d5a... هستند: توالی از نام‌های دایرکتوری با دو رقم هگزادسیمال که در ادامه نام فایلی با بقیه شناسه شیء (Object ID) قرار دارد.
2026-06-29 Git 2.55.0