GIT-AM(1) Git Manual GIT-AM(1)

git-am - اعمال یک سری از وصله‌ها از یک صندوق پستی

git am [--signoff] [--keep] [--[no-]keep-cr] [--[no-]utf8] [--[no-]verify]
         [--[no-]3way] [--interactive] [--committer-date-is-author-date]
         [--ignore-date] [--ignore-space-change | --ignore-whitespace]
         [--whitespace=<action>] [-C<n>] [-p<n>] [--directory=<dir>]
         [--exclude=<path>] [--include=<path>] [--reject] [-q | --quiet]
         [--[no-]scissors] [-S[<key-id>]] [--patch-format=<format>]
         [--quoted-cr=<action>]
         [--empty=(stop|drop|keep)]
         [(<mbox> | <Maildir>)...]
git am (--continue | --skip | --abort | --quit | --retry | --show-current-patch[=(diff|raw)] | --allow-empty)

پیام‌های ایمیل موجود در یک صندوق پستی (mailbox) را به پیام‌های ثبت کامیت، اطلاعات نویسنده، و وصله‌ها تجزیه کرده و آن‌ها را بر روی شاخه فعلی اعمال می‌کند. می‌توانید آن را به عنوان عملیات معکوس git-format-patch(1) که بر روی شاخه‌ای با تاریخچه مستقیم و بدون ادغام اجرا می‌شود در نظر بگیرید.

(<mbox>|<Maildir>)...

فهرست فایل‌های صندوق پستی که وصله‌ها باید از آن‌ها خوانده شوند. اگر این آرگومان را ارائه نکنید، دستور از ورودی استاندارد می‌خواند. اگر دایرکتوری‌ها را مشخص کنید، با آن‌ها مانند Maildir رفتار خواهد شد.

-s, --signoff

افزودن یک دنباله (trailer) Signed-off-by به پیام کامیت (نگاه کنید به git-interpret-trailers(1))، با استفاده از هویت کامیت‌کننده خودتان. برای اطلاعات بیشتر گزینه signoff را در git-commit(1) ببینید.

-k, --keep

ارسال پرچم -k به git-mailinfo(1).

--keep-non-patch

ارسال پرچم -b به git-mailinfo(1).

--keep-cr, --no-keep-cr

همراه با --keep-cr، دستور git-mailsplit(1) را با همان گزینه فراخوانی می‌کند تا از حذف CR در انتهای خطوط جلوگیری شود. متغیر پیکربندی am.keepcr می‌تواند برای تعیین رفتار پیش‌فرض استفاده شود. گزینه --no-keep-cr برای بازنویسی و نادیده گرفتن am.keepcr مفید است.

-c, --scissors

حذف همه چیز در بدنه قبل از خط قیچی (نگاه کنید به git-mailinfo(1)). می‌تواند با استفاده از متغیر پیکربندی mailinfo.scissors به صورت پیش‌فرض فعال شود.

--no-scissors

نادیده گرفتن خطوط قیچی (نگاه کنید به git-mailinfo(1)).

--quoted-cr=<action>

این پرچم به git-mailinfo(1) منتقل می‌شود.

--empty=(drop|keep|stop)

نحوه مدیریت یک پیام ایمیل که فاقد وصله است:

drop

پیام ایمیل نادیده گرفته خواهد شد.

keep

یک کامیت خالی ایجاد می‌شود که محتوای پیام ایمیل به عنوان لاگ آن قرار می‌گیرد.

stop

دستور با شکست مواجه شده و در میانه نشست فعلی am متوقف می‌شود. این رفتار پیش‌فرض است.

-m, --message-id

ارسال پرچم -m به git-mailinfo(1)، به طوری که سرآیند Message-ID به پیام کامیت اضافه شود. متغیر پیکربندی am.messageid می‌تواند برای تعیین رفتار پیش‌فرض استفاده شود.

--no-message-id

سرآیند Message-ID را به پیام کامیت اضافه نکنید. --no-message-id برای لغو و بازنویسی am.messageid مفید است.

-q, --quiet

حالت بی‌صدا. فقط پیام‌های خطا چاپ می‌شوند.

-u, --utf8

ارسال پرچم -u به git-mailinfo(1). پیام لاگ پیشنهادی برای کامیت برگرفته از ایمیل مجدداً با کدگذاری UTF-8 کدگذاری می‌شود (متغیر پیکربندی i18n.commitEncoding می‌تواند برای مشخص کردن کدگذاری ترجیحی پروژه در صورتی که UTF-8 نباشد استفاده شود).

این گزینه در نسخه‌های پیشین گیت اختیاری بود، اما اکنون پیش‌فرض است. می‌توانید از --no-utf8 برای لغو این حالت استفاده کنید.

--no-utf8

ارسال پرچم -n به git-mailinfo(1).

-3, --3way, --no-3way

هنگامی که وصله به صورت تمیز اعمال نمی‌شود، اگر وصله هویت blobهایی را که قرار است بر روی آن‌ها اعمال شود ثبت کرده باشد و ما آن blobها را به صورت محلی در دسترس داشته باشیم، به ادغام ۳-طرفه (3-way merge) عقب‌گرد می‌کند. --no-3way می‌تواند برای بازنویسی متغیر پیکربندی am.threeWay استفاده شود. برای اطلاعات بیشتر، am.threeWay را در git-config(1) ببینید.

--rerere-autoupdate, --no-rerere-autoupdate

پس از اینکه مکانیزم rerere از یک راه‌حل ثبت‌شده برای تعارض فعلی جهت به‌روزرسانی فایل‌ها در درخت کاری مجدداً استفاده کرد، به آن اجازه می‌دهد ایندکس را نیز با نتیجه حل تعارض به‌روز کند. --no-rerere-autoupdate روشی مناسب برای بررسی مجدد عملکرد git-rerere(1) و شناسایی ادغام‌های اشتباه احتمالی، قبل از ثبت نتیجه در ایندکس با دستور جداگانه git-add(1) است.

--ignore-space-change, --ignore-whitespace, --whitespace=<action>, -C<n>, -p<n>, --directory=<dir>, --exclude=<path>, --include=<path>, --reject

این پرچم‌ها به برنامه git-apply(1) که وصله را اعمال می‌کند ارسال می‌شوند.

مقادیر معتبر <action> برای گزینه --whitespace عبارتند از: nowarn، warn، fix، error و error-all.

--patch-format

به طور پیش‌فرض دستور تلاش می‌کند قالب وصله را به طور خودکار تشخیص دهد. این گزینه به کاربر امکان می‌دهد از تشخیص خودکار صرف‌نظر کرده و قالبی را که وصله(ها) باید بر اساس آن تفسیر شوند مشخص کند. قالب‌های معتبر عبارتند از mbox، mboxrd، stgit، stgit-series و hg.

-i, --interactive

اجرا به صورت تعاملی.

--verify, -n, --no-verify

اجرای قلاب‌های (hooks) pre-applypatch و applypatch-msg. این رفتار پیش‌فرض است. نادیده گرفتن این قلاب‌ها با -n یا --no-verify امکان‌پذیر است. همچنین ببینید: githooks(5).

توجه داشته باشید که قلاب post-applypatch را نمی‌توان نادیده گرفت.

--committer-date-is-author-date

به طور پیش‌فرض دستور، تاریخ پیام ایمیل را به عنوان تاریخ نویسنده کامیت ثبت می‌کند و از زمان ایجاد کامیت به عنوان تاریخ کامیت‌کننده استفاده می‌نماید. این گزینه به کاربر اجازه می‌دهد با استفاده از همان مقدار تاریخ نویسنده، تاریخ کامیت‌کننده را تغییر دهد.

هشدار
سازوکار پیمایش تاریخچه فرض می‌کند که کامیت‌ها دارای برچسب‌های زمانی غیرکاهشی هستند. باید بررسی کنید که آیا واقعاً به استفاده از این گزینه نیاز دارید یا خیر. شما فقط باید زمانی از این گزینه برای بازنویسی تاریخ کامیت‌کننده استفاده کنید که کامیت‌ها را روی پایه‌ای اعمال می‌کنید که کامیت آن (از نظر تاریخ کامیت) قدیمی‌تر از قدیمی‌ترین وصله‌ای است که اعمال می‌کنید.

--ignore-date

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

--skip

نادیده گرفتن وصله فعلی. این گزینه تنها هنگام راه‌اندازی مجدد یک فرآیند وصله‌زدن متوقف‌شده معنا دارد.

-S[<key-id>], --gpg-sign[=<key-id>], --no-gpg-sign

امضای کامیت‌ها با GPG. آرگومان <key-id> اختیاری است و پیش‌فرض آن هویت کامیت‌کننده است؛ در صورت تعیین، باید بدون فاصله به گزینه متصل باشد. --no-gpg-sign برای لغو هم متغیر پیکربندی commit.gpgSign و هم گزینه قبلی --gpg-sign مفید است.

--continue, -r, --resolved

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

--resolvemsg=<msg>

هنگامی که خطایی در اعمال وصله رخ می‌دهد، <msg> پیش از خروج روی صفحه چاپ خواهد شد. این پیام جایگزین پیام استانداردی می‌شود که به شما اطلاع می‌دهد برای مدیریت خطا از --continue یا --skip استفاده کنید. این گزینه صرفاً برای استفاده داخلی بین git-rebase(1) و git-am(1) است.

--abort

بازیابی شاخه اصلی و لغو عملیات وصله‌زدن. محتویات فایل‌های درگیر در عملیات am را به وضعیت پیش از am بازمی‌گرداند.

--quit

لغو عملیات اعمال وصله اما بدون تغییر گذاشتن HEAD و ایندکس.

--retry

تلاش مجدد برای اعمال آخرین وصله دارای تعارض. این گزینه معمولاً فقط برای ارسال گزینه‌های اضافی به تلاش مجدد مفید است (مانند --3way)، چرا که در غیر این صورت همان خطای قبلی را مجدداً مشاهده خواهید کرد.

--show-current-patch[=(diff|raw)]

نمایش پیامی که git-am(1) به دلیل تعارض روی آن متوقف شده است. اگر raw مشخص شود، محتوای خام پیام ایمیل نمایش داده می‌شود؛ اگر diff، فقط بخش diff نمایش داده خواهد شد. پیش‌فرض raw است.

--allow-empty

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

نام نویسنده کامیت از خط "From: " در پیام گرفته می‌شود، و تاریخ نویسنده کامیت از خط "Date: " در پیام استخراج می‌گردد. خط "Subject: " پس از حذف پیشوند معمول "[PATCH <anything>]" به عنوان عنوان کامیت استفاده می‌شود. فرض بر این است که خط "Subject: " به طور خلاصه و در یک خط موضوع کامیت را بیان کند.

خطوط "From: "، "Date: " و "Subject: " که در ابتدای بدنه قرار دارند مقادیر متناظر نام نویسنده و عنوان کامیت که از سرآیندها گرفته شده‌اند را بازنویسی می‌کنند.

پیام کامیت از عنوان برگرفته از "Subject: "، یک خط خالی و بدنه پیام تا جایی که وصله شروع می‌شود تشکیل می‌گردد. فاصله‌های سفید اضافی در انتهای هر خط به صورت خودکار حذف می‌شوند.

انتظار می‌رود که وصله به صورت درون‌خطی و مستقیماً پس از پیام قرار داشته باشد. هر خطی که به یکی از اشکال زیر باشد:

•سه خط تیره و انتهای خط، یا
•خطی که با diff - آغاز می‌شود، یا
•خطی که با `Index: ` آغاز می‌شود

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

این بدان معناست که محتویات پیام کامیت می‌تواند به طور ناخواسته پردازش را قطع کند (بخش «هشدارها» در زیر را ببینید).

هنگام فراخوانی اولیه git-am(1)، نام صندوق‌های پستی مورد نظر برای پردازش را به آن می‌دهید. به محض مشاهده اولین وصله‌ای که اعمال نمی‌شود، در میانه کار متوقف می‌گردد. شما می‌توانید به یکی از دو روش زیر از این وضعیت خارج شوید:

1.نادیده گرفتن وصله فعلی با اجرای مجدد دستور به همراه گزینه --skip.
2.حل دستی تعارض در دایرکتوری کاری، و به‌روزرسانی فایل ایندکس برای رساندن آن به وضعیتی که وصله باید تولید می‌کرد. سپس دستور را با گزینه --continue اجرا کنید.

این دستور از پردازش صندوق‌های پستی جدید تا زمانی که عملیات فعلی تمام نشود خودداری می‌کند؛ بنابراین اگر تصمیم دارید کار را از ابتدا شروع کنید، پیش از اجرای دستور با نام‌های صندوق پستی، دستور git am --abort را اجرا کنید.

پیش از اعمال هرگونه وصله، ORIG_HEAD به نوک شاخه فعلی تنظیم می‌شود. این امر در صورتی مفید است که در چندین کامیت با مشکل مواجه شوید، مانند اجرای git-am(1) روی شاخه اشتباه یا خطایی در کامیت‌ها که اصلاح آن با تغییر صندوق پستی آسان‌تر است (مثلاً خطا در خطوط From:).

خروجی حاصل از git-format-patch(1) ممکن است هنگام اعمال با git-am(1) به پیام کامیت متفاوتی منجر شود. همچنین وصله‌ای که اعمال می‌شود ممکن است با آنچه تولید شده بود متفاوت باشد، یا اعمال وصله کاملاً شکست بخورد. برای آگاهی از قوانین نحوی، بخش «بحث و بررسی» در بالا را مشاهده کنید.

توجه داشته باشید که این موضوع به ویژه برای diffهای تورفتگی‌نیافته که در پیام کامیت رخ می‌دهند مشکل‌ساز است؛ ممکن است diff درون پیام کامیت همراه با بخش وصله اعمال شود، یا سازوکار اعمال وصله به این دلیل که هدف وصله اعمال نمی‌شود دچار خطا گردد. به عنوان مثال، این مسئله می‌تواند ناشی از یک diff در یک بلوک کد Markdown باشد.

راه‌حل این مشکل، ایجاد تورفتگی برای diff یا سایر متونی است که ممکن است مشکل‌ساز شوند.

این افت کیفیت ممکن است هنگام اعمال مستقیم وصله‌ها از یک صندوق پستی به سادگی قابل توجه باشد. با این حال، تغییرات نشأت‌گرفته از گیت ممکن است به صورت دسته‌ای اعمال شوند، که در این صورت تشخیص آن بسیار دشوارتر خواهد بود. برای نمونه، این می‌تواند یک توزیع لینوکس باشد که از فایل‌های وصله برای اعمال تغییرات بر روی کامیت‌های مخازن بالادست استفاده می‌کند. این نشان می‌دهد که این رفتار تنها بر جریان‌های کاری ایمیل تأثیر نمی‌گذارد.

با توجه به این محدودیت‌ها، ممکن است فرد وسوسه شود به جای آن از یک ابزار عمومی مانند patch(1) استفاده کند. با این حال، patch(1) نه تنها به دنبال diffهای تورفتگی‌نیافته خواهد گشت (مانند git-am(1))، بلکه تلاش خواهد کرد diffهای تورفته را نیز اعمال کند.

این دستور می‌تواند قلاب‌های applypatch-msg، pre-applypatch و post-applypatch را اجرا کند. برای اطلاعات بیشتر githooks(5) را ببینید.

گزینه‌های --verify/-n/--no-verify را ببینید.

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

am.keepcr

اگر مقدار آن true باشد، git-am(1) دستور git-mailsplit(1) را برای وصله‌ها در قالب mbox با پارامتر --keep-cr فراخوانی می‌کند. در این حالت git-mailsplit(1) کاراکتر \r را از خطوطی که با \r\n خاتمه می‌یابند حذف نخواهد کرد. می‌توان با تعیین --no-keep-cr از خط فرمان، این مقدار را نادیده گرفت و بازنویسی کرد.

am.threeWay

به طور پیش‌فرض، اگر وصله به صورت تمیز اعمال نشود، git-am(1) با شکست مواجه خواهد شد. هنگامی که روی true تنظیم شود، این تنظیم به git-am(1) می‌گوید که در صورت ثبت هویت blobهایی که وصله باید بر روی آن‌ها اعمال شود و دسترسی محلی به آن blobها، به ادغام ۳-طرفه عقب‌گرد کند (معادل ارسال گزینه --3way از خط فرمان). مقدار پیش‌فرض false است.

am.messageId

هنگام استفاده از git-am(1)، یک دنباله Message-ID بر اساس سرآیند ایمیل به کامیت اضافه می‌کند (نگاه کنید به git-interpret-trailers(1)). همچنین گزینه‌های --message-id و --no-message-id را ببینید.

git-apply(1), git-format-patch(1).

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

2026-06-29 Git 2.55.0