GIT-REVISE(1) git-revise GIT-REVISE(1)

git-revise - به‌روزرسانی، تفکیک و چیدمان کارآمد کامیت‌های گیت

git revise [<options>] [<target>]

دستور git revise یک زیردستور git(1) برای به‌روزرسانی، تفکیک و بازآرایی کارآمد کامیت‌ها است. این ابزار به شدت از git-rebase(1) الهام گرفته است، اما تلاش می‌کند برای گردش‌های کاری مبتنی بر دسته وصله (patch-stack) کارآمدتر و ارگونومیک‌تر باشد.

به‌طور پیش‌فرض، git revise تغییرات استیج‌شده (staged) را بر روی <target> اعمال کرده و HEAD را به‌روز می‌کند تا به تاریخچه بازبینی‌شده اشاره کند. همچنین این ابزار از تفکیک کامیت‌ها و بازنویسی پیام کامیت‌ها پشتیبانی می‌کند.

برخلاف git-rebase(1) ، دستور git revise از تغییر دایرکتوری کاری و وضعیت ایندکس خودداری می‌کند، تمامی ادغام‌ها را در حافظه (in-memory) انجام می‌دهد و تنها در صورت لزوم آن‌ها را روی دیسک می‌نویسد. این امر به آن اجازه می‌دهد روی پایگاه‌های کد بزرگ به‌طور چشمگیری سریع‌تر عمل کند و از باطل شدن بیلدها جلوگیری نماید.

اگر --autosquash یا --interactive مشخص شود، آرگومان <target> می‌تواند حذف شود یا با مقدار ویژه :option:--root داده شود. اگر حذف شود، git revise محدوده‌ای از کامیت‌های منتشرنشده روی شاخه جاری را در نظر می‌گیرد. اگر به صورت :option:--root داده شود، تمام کامیت‌ها از جمله کامیت ریشه در نظر گرفته می‌شوند.

استیج کردن تغییرات فایل‌های ردیابی‌شده پیش از بازبینی.
استیج تعاملی بخش‌ها (hunks) از درخت کاری پیش از بازبینی.
نادیده گرفتن تغییرات استیج‌شده در ایندکس.
بازنشانی نویسنده کامیت هدف به کاربر جاری.
شاخه کاری جهت به‌روزرسانی؛ پیش‌فرض HEAD است.
امضای GPG کامیت‌ها. این گزینه بر هر دو پیکربندی گیت commit.gpgSign و revise.gpgSign اولویت دارد.

به جای اعمال تغییرات استیج‌شده بر روی <target>، یک فهرست کارها (todo list) از اقداماتی که باید بر روی کامیت‌های پس از <target> انجام شوند را ویرایش می‌کند. بخش حالت تعاملی (INTERACTIVE MODE) را ببینید.
به جای اعمال مستقیم تغییرات استیج‌شده به <target>، اقدامات fixup یا squash علامت‌گذاری‌شده با fixup! یا squash! را بین <target> و HEAD جاری به‌طور خودکار انجام می‌دهد. برای اطلاعات بیشتر درباره نحوه عملکرد این اقدامات، بخش حالت تعاملی (INTERACTIVE MODE) را ببینید.

این کامیت‌ها معمولاً با git commit --fixup=<commit> یا git commit --squash=<commit> ایجاد می‌شوند و هدف را با سطر نخست پیام کامیت آن شناسایی می‌کنند.

این گزینه می‌تواند با --interactive ترکیب شود تا کارهای تولیدشده پیش از اجرا قابل تغییر و ویرایش باشند.

اگر گزینه --autosquash به‌طور پیش‌فرض با استفاده از یک متغیر پیکربندی فعال شده باشد، می‌توان از گزینه --no-autosquash برای لغو و غیرفعال کردن این تنظیم استفاده کرد. بخش پیکربندی (CONFIGURATION) را ببینید.

انتخاب تعاملی قطعات تغییر (hunks) از <target>. قطعات انتخاب‌شده بلافاصله پس از هدف به یک کامیت دوم تفکیک می‌شوند.

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

برای یادگیری نحوه کار با این حالت، بخش «Interactive Mode» از git-add(1) را ببینید.

پس از اعمال تغییرات استیج‌شده، پیام کامیت <target> را ویرایش می‌کند.

این گزینه می‌تواند با --interactive ترکیب شود تا امکان ویرایش پیام‌های کامیت درون فهرست کارها فراهم شود. برای اطلاعات بیشتر، بخش حالت تعاملی (INTERACTIVE MODE) را ببینید.

استفاده از <msg> مشخص‌شده به عنوان پیام کامیت جدید برای <target>. اگر چندین گزینه -m داده شود، مقادیر آن‌ها به عنوان بندهای جداگانه به یکدیگر الحاق می‌شوند.
نمایش اطلاعات نسخه و خروج.

پیکربندی توسط git-config(1) مدیریت می‌شود.

اگر روی true تنظیم شود، هر زمان که --interactive مشخص شده باشد، --autosquash را نیز در بر می‌گیرد. با --no-autosquash لغو می‌شود. مقدار پیش‌فرض false است. اگر تنظیم نشده باشد، مقدار rebase.autoSquash به جای آن استفاده می‌شود.
اگر روی true تنظیم شود، کامیت‌های جدید با GPG امضا می‌شوند؛ مقدار پیش‌فرض false است. این تنظیم پیکربندی اصلی گیت commit.gpgSign را لغو می‌کند و می‌تواند توسط گزینه‌های خط فرمان --gpg-sign و --no-gpg-sign لغو و بازنویسی شود.

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

در حال حاضر از git-mergetool(1) برای حل تداخل‌ها پشتیبانی نمی‌شود.

هیچ تلاشی برای تشخیص تغییر نام فایل‌ها یا پوشه‌ها انجام نمی‌شود. git revise ممکن است در میان تغییر نام‌ها نتایج نامطلوبی ایجاد کند. هنگامی که ردیابی تغییر نام اهمیت دارد، از حالت تعاملی git-rebase(1) استفاده کنید.

یک اجرای موفق git revise یک ورودی منفرد به reflog اضافه می‌کند، که اجازه می‌دهد با دستور git reset @{1} لغو (undo) شود. دستورهای ناموفق git revise مخزن شما را تا حد زیادی بدون تغییر باقی می‌گذارند.

هیچ کامیت ادغامی نباید بین کامیت هدف و HEAD وجود داشته باشد، زیرا بازنویسی آن‌ها پشتیبانی نمی‌شود.

برای اطلاعات بیشتر درباره پیامدهای اصلاح تاریخچه در مخزنی که به اشتراک می‌گذارید، git-rebase(1) را ببینید.

دستور git revise از یک حالت تعاملی الهام‌گرفته از حالت تعاملی git-rebase(1) پشتیبانی می‌کند.

این حالت با آخرین کامیتی که می‌خواهید «همان‌طور که هست» حفظ شود شروع می‌شود:

git revise -i <after-this-commit>

هدف ویژه --root برای بازبینی همه‌چیز تا کامیت ریشه در دسترس است:

git revise -i --root

یک ویرایشگر به همراه کامیت‌های موجود در شاخه جاری شما پس از کامیت داده‌شده باز خواهد شد. اگر ایندکس دارای هرگونه تغییر استیج‌شده اما کامیت‌نشده باشد، یک ورودی <git index> نیز وجود خواهد داشت.

pick 8338dfa88912 Oneline summary of first commit
pick 735609912343 Summary of second commit
index 672841329981 <git index>

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

اگر -e مشخص شده باشد، پیام کامل کامیت گنجانده خواهد شد و هر سطر دستور با ++ آغاز می‌شود. هرگونه تغییر اعمال‌شده در پیام‌های کامیت درون این فایل، بر روی کامیت مورد نظر اعمال خواهد شد و امکان ویرایش همزمان پیام‌های کامیت در مرحله ویرایش فهرست کارها (todo) را فراهم می‌سازد.

++ pick 8338dfa88912
Oneline summary of first commit
Body of first commit
++ pick 735609912343
Summary of second commit
Body of second commit
++ index 672841329981
<git index>

دستورهای زیر در تمام حالت‌های تعاملی پشتیبانی می‌شوند:

این تغییرات را کامیت نمی‌کند، بلکه آن‌ها را در ایندکس به صورت استیج‌شده باقی می‌گذارد. سطرهای index باید در انتهای فایل قرار گیرند.
استفاده از کامیت داده‌شده همان‌طور که هست در تاریخچه. هنگامی که روی ورودی تولیدشده index اعمال شود، کامیت دارای پیام <git index> خواهد بود.
اضافه کردن تغییرات کامیت به کامیت قبلی و باز کردن ویرایشگر برای ادغام پیام‌های کامیت‌ها.
مشابه squash، اما به جای ویرایش، پیام این کامیت دور ریخته می‌شود.
باز کردن ویرایشگر برای ویرایش پیام کامیت.
انتخاب تعاملی قطعات تغییر (hunks) از کامیت. قطعات انتخاب‌شده بلافاصله پس از آن به یک کامیت دوم تفکیک می‌شوند.

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

برای یادگیری نحوه کار با این حالت، بخش «Interactive Mode» از git-add(1) را ببینید.

لطفاً اشکالات و درخواست‌های قابلیت را به سامانه ردیابی اشکالات در https://github.com/mystor/git-revise/issues گزارش دهید.

کد، مستندات و سایر مشارکت‌ها نیز مورد استقبال قرار می‌گیرند.

git(1) git-rebase(1) git-add(1)

2018-2026, Nika Layzell

February 22, 2026 0.8.0