| jj-rebase(1) | General Commands Manual | jj-rebase(1) |
نام (NAME)
jj-rebase - انتقال بازنگریها به والد(های) متفاوت
خلاصه دستور (SYNOPSIS)
jj rebase [-b|--branch] [-R|--repository] [--ignore-working-copy] [-s|--source] [--no-integrate-operation] [-r|--revision] [--ignore-immutable] [--at-operation] [--debug] [--color] [--skip-emptied] [--keep-divergent] [--quiet] [--no-pager] [--simplify-parents] [--config] [--config-file] [-h|--help] <--onto|--insert-after|--insert-before>
توضیحات (DESCRIPTION)
انتقال بازنگریها به والد(های) متفاوت
این دستور، بازنگریها را به والد(های) متفاوتی منتقل میکند در حالی که تغییرات (diff) موجود در بازنگریها را حفظ مینماید.
سه روش مختلف برای تعیین بازنگریهایی که باید بازپایهریزی شوند وجود دارد:
* --source/-s برای بازپایهریزی یک بازنگری و نوادگان آن
* --branch/-b برای بازپایهریزی کل یک شاخه، نسبت به مقصد
* --revisions/-r برای بازپایهریزی بازنگریهای مشخصشده بدون نوادگان آنها
اگر هیچ گزینهای مشخص نشود، مقدار پیشفرض -b @ خواهد بود.
سه روش مختلف برای مشخص کردن مقصد بازپایهریزی بازنگریها وجود دارد:
* --onto/-o برای بازپایهریزی بازنگریها بر روی اهداف مشخصشده
* --insert-after/-A برای بازپایهریزی بازنگریها بر روی اهداف مشخصشده و بازپایهریزی نوادگان اهداف بر روی بازنگریهای بازپایهریزیشده
* --insert-before/-B برای بازپایهریزی بازنگریها بر روی والدین اهداف مشخصشده و بازپایهریزی اهداف و نوادگان آنها بر روی بازنگریهای بازپایهریزیشده
برای جزئیات بیشتر دربارهٔ روشهای مختلف تعیین بازنگریها و مقصد بازپایهریزی، بخشهای زیر را ببینید.
اگر یک بازنگری رونوشت کاری متروکه (abandoned) شود، یک بازنگری جدید و خالی به آن اختصاص داده میشود. این یک قاعدهٔ کلی است و مختص این دستور نیست.
تعیین بازنگریهایی که باید بازپایهریزی شوند
با --source/-s، دستور بازنگری مشخصشده و تمام نوادگان آن را به مقصد بازپایهریزی میکند. برای نمونه، اجرای jj rebase -s M -o O تاریخچهٔ شما را به این صورت دگرگون میسازد (حروفی که پس از آنها آپاستروف آمده است، نسخههای پس از بازپایهریزی هستند):
O N' | | | N M' | | | | M O | | => | | | L | L | |/ | | | K | K |/ |/ J J
هر بازنگری ارائهشده به -s به فرزند مستقیم مقصد تبدیل خواهد شد؛ بنابراین اگر به جای دستور قبل، jj rebase -s M -s N -o O (یا jj rebase -s 'M|N' -o O) را در مثال بالا اجرا کنید، آنگاه 'N به جای آن، فرزند مستقیم O خواهد شد.
با --branch/-b، دستور کل «شاخه» حاوی بازنگری مشخصشده را بازپایهریزی میکند. یک «شاخه» مجموعهای از بازنگریها است که شامل موارد زیر میشود:
* بازنگری مشخصشده و نیاکانی که همزمان نیاکان مقصد نیستند
* تمام نوادگان آن بازنگریها
به بیان دیگر، jj rebase -b X -o Y بازنگریهای موجود در مجموعهٔ بازنگری (revset) (Y..X):: را بازپایهریزی میکند (که برای یک ریشهٔ یکتا معادل jj rebase -s 'roots(Y..X)' -o Y است). برای نمونه، هر یک از دستورات jj rebase -b L -o O یا jj rebase -b M -o O تاریخچهٔ شما را به این صورت دگرگون خواهند کرد (چرا که L و M نسبت به مقصد، در یک «شاخه» قرار دارند):
O N' | | | N M' | | | | M | L' | | => |/ | | L K' | |/ | | K O |/ | J J
با --revisions/-r، دستور تنها بازنگریهای مشخصشده را به مقصد بازپایهریزی میکند. هر «شکافی» که بر جای بماند، با بازپایهریزی نوادگان بر روی والد(های) بازنگریهای مشخصشده پر خواهد شد. برای نمونه، jj rebase -r K -o M تاریخچهٔ شما را به این شکل دگرگون خواهد کرد:
M K' | | | L M | | => | | K | L' |/ |/ J J
میتوان چندین بازنگری را مشخص کرد و تمام وابستگیها (یالهای گراف) درون آن مجموعه حفظ خواهند شد. برای نمونه، اجرای jj rebase -r 'K|N' -o O تاریخچهٔ شما را به این صورت دگرگون میکند:
O N' | | | N K' | | | | M O | | => | | | L | M' | |/ |/ | K | L' |/ |/ J J
دستور jj rebase -s X مشابه jj rebase -r X:: است و اگر X یک بازنگری منفرد باشد، رفتار یکسانی خواهد داشت. با این حال، اگر X مجموعهای از چندین بازنگری باشد، یا چندین آرگومان -s ارائه کرده باشید، در این صورت jj rebase -s هر یک از بازنگریهای مشخصشده را به فرزند بیواسطهٔ مقصد تبدیل میکند، در حالی که jj rebase -r وابستگیهای درون مجموعه را حفظ مینماید.
توجه داشته باشید که با تکرار آرگومان -o میتوانید یک بازنگری ادغام ایجاد کنید. برای نمونه، اگر متوجه شدید که بازنگری L برای کارکرد صحیح (علاوه بر والد فعلی خود K) به بازنگری M نیز وابسته است، میتوانید دستور jj rebase -s L -o K -o M را اجرا کنید:
M L' | |\ | L M | | | => | | | K | K |/ |/ J J
تعیین مقصد بازپایهریزی بازنگریها
با --onto/-o، دستور بازنگریهای انتخابشده را بر روی اهداف بازپایهریزی میکند. نوادگان موجود اهداف تحت تأثیر قرار نخواهند گرفت. برای مثالها بخش بالا را ببینید.
با --insert-after/-A، بازنگریهای انتخابشده پس از اهداف درج خواهند شد. این گزینه شبیه به -o است، اما اگر اهداف دارای نوادگانی باشند، آن نوادگان بر روی بازنگریهای انتخابشدهٔ بازپایهریزیشده بازپایهریزی خواهند شد.
برای نمونه، jj rebase -r K -A L تاریخچه را به این صورت بازنویسی خواهد کرد:
N N' | | | M | M' |/ |/ L => K' | | | K L |/ | J J
آرگومان -A (و همچنین -B) را میتوان برای مرتبسازی مجدد بازنگریها نیز به کار برد. برای نمونه، jj rebase -r M -A J تاریخچه را بدین شکل بازنویسی خواهد کرد:
M L' | | L K' | => | K M' | | J J
با --insert-before/-B، بازنگریهای انتخابشده پیش از اهداف درج خواهند شد. این کار با بازپایهریزی بازنگریهای انتخابشده بر روی والدین بازنگریهای هدف، و سپس بازپایهریزی بازنگریهای هدف و نوادگان آنها بر روی بازنگریهای بازپایهریزیشده صورت میپذیرد.
برای نمونه، jj rebase -r K -B L تاریخچه را به این صورت بازنویسی خواهد کرد:
N N' | | | M | M' |/ |/ L => L' | | | K K' |/ | J J
آرگومانهای -A و -B را میتوان با یکدیگر ترکیب کرد، که این امر در اطراف نقاط ادغام کاربردی است. برای نمونه، میتوانید از jj rebase -r K -A J -B M برای ایجاد یک ادغام جدید استفاده کنید (هرچند دستور jj rebase -r M -o L -o K در این مورد خاص ممکن است سادهتر باشد):
M M' | |\ L L | | => | | | K | K' |/ |/ J J
برای درج یک کامیت درون یک ادغام موجود با دستور jj rebase -r O -A K -B M:
O N' | |\ N | M' |\ | |\ | M | O'| | | => |/ / | L | L | | | | K | K | |/ |/ J J
گزینهها (OPTIONS)
- -b, --branch <REVSETS>
- بازپایهریزی
کل شاخه
نسبت به
نیاکان
مقصد
(قابلیت
تکرار دارد)
دستور `jj rebase -b=br -o=dst` معادل `jj rebase '-s=roots(dst..br)' -o=dst` است.
اگر هیچیک از گزینههای `-b`، `-s` یا `-r` ارائه نشوند، مقدار پیشفرض `-b @` خواهد بود.
- -s, --source <REVSETS>
- بازپایهریزی
بازنگری(های)
مشخصشده
به همراه
درخت
نوادگان
آنها
(قابلیت
تکرار دارد)
هر بازنگری مشخصشده به فرزند مستقیم بازنگری(های) مقصد تبدیل خواهد شد، حتی اگر برخی از بازنگریهای مبدأ نوادگان بازنگریهای دیگر باشند.
اگر هیچیک از گزینههای `-b`، `-s` یا `-r` ارائه نشوند، مقدار پیشفرض `-b @` خواهد بود.
- -r, --revision <REVSETS>
- بازپایهریزی
بازنگریهای
دادهشده،
و
بازپایهریزی
نوادگان بر
روی
والد(های)
این
بازنگری
برخلاف `-s` یا `-b`، با `jj rebase -r` میتوانید یک بازنگری `A` را بر روی نوادهای از `A` بازپایهریزی کنید.
اگر هیچیک از گزینههای `-b`، `-s` یا `-r` ارائه نشوند، مقدار پیشفرض `-b @` خواهد بود.
- -o, --onto <REVSETS>
- بازنگری(هایی) که باید بر روی آنها بازپایهریزی شود (برای ایجاد کامیت ادغام قابل تکرار است)
- -A, --insert-after <REVSETS>
- بازنگری(هایی) که باید پس از آنها درج صورت گیرد (برای ایجاد کامیت ادغام قابل تکرار است)
- -B, --insert-before <REVSETS>
- بازنگری(هایی) که باید پیش از آنها درج صورت گیرد (برای ایجاد کامیت ادغام قابل تکرار است)
- --skip-emptied
- در صورتی که فعال باشد، چنانچه بازپایهریزی منجر به ایجاد یک کامیت خالی شود، آن کامیت متروکه خواهد شد. اگر کامیت پیش از بازپایهریزی خالی بوده باشد، متروکه نخواهد شد. هرگز کامیتهای ادغام با چندین والد غیرخالی را نادیده نمیگیرد.
- --keep-divergent
- حفظ
کامیتهای
واگرا در
حین
بازپایهریزی
بدون این فلگ، کامیتهای واگرا در حین بازپایهریزی متروکه میشوند اگر کامیت دیگری با همان شناسهٔ تغییر (change ID) با تغییرات یکسان از قبل در مقصد موجود باشد.
- --simplify-parents
- سادهسازی والدین کامیتهای بازپایهریزیشده، همانند `jj simplify-parents` در هنگام بازپایهریزی. هر والدی که نیاکان سایر والدین باشد حذف خواهد شد.
- -h, --help
- چاپ راهنما (مشاهده خلاصه با '-h')
گزینههای عمومی (GLOBAL OPTIONS)
- -R, --repository <REPOSITORY>
- مسیر مخزنی
که عملیات
روی آن
انجام
میشود.
بهطور پیشفرض، Jujutsu به دنبال نزدیکترین دایرکتوری .jj/ در اجداد دایرکتوری کاری فعلی میگردد.
- --ignore-working-copy
- از رونوشت
کاری
اسنپشات
گرفته نشود
و آن را
بهروزرسانی
نکند.
بهطور پیشفرض، Jujutsu در آغاز هر دستور از رونوشت کاری اسنپشات میگیرد. همچنین در صورت تغییر کامیت رونوشت کاری (`@`) توسط دستور، رونوشت کاری در پایان دستور نیز بهروزرسانی میشود. اگر میخواهید از اسنپشات گرفتن از رونوشت کاری جلوگیری کنید و در عوض یک کامیت رونوشت کاری احتمالاً قدیمی را ببینید، میتوانید از `--ignore-working-copy` استفاده کنید. این گزینه برای مثال در خط فرمان (command prompt) مفید است، بهویژه اگر فرآیند دیگری داشته باشید که کامیتهای رونوشت کاری را ثبت میکند.
بارگذاری مخزن در یک عملیات خاص با `--at-operation` بهطور ضمنی گزینهٔ `--ignore-working-copy` را فعال میکند.
- --no-integrate-operation
- دستور طبق
معمول اجرا
شود اما هیچ
عملیاتی
ادغام نشود.
هنگامی که این گزینه مشخص شود، عملیات همچنان مانند قبل ایجاد خواهند شد اما در تاریخچهٔ عملیات (operation log) ادغام نمیشوند. همچنین رونوشت کاری نیز بهروزرسانی نخواهد شد.
دستور، شناسهٔ عملیات حاصل را چاپ خواهد کرد. میتوانید آن شناسه را برای مثال به `jj --at-op` ارسال کنید تا وضعیت بهدستآمدهٔ مخزن را بررسی نمایید، یا آن را به `jj op restore` بدهید تا مخزن به آن وضعیت بازگردانده شود. همچنین میتوانید شناسه را به `jj op integrate` بدهید تا عملیات ادغام شود.
توجه داشته باشید که این کار مانع از عوارض جانبی خارج از مخزن *نمیشود*. برای نمونه، `jj git push --no-integrate-operation` همچنان عملیات ارسال (push) را انجام خواهد داد.
- --ignore-immutable
- امکان
بازنویسی
کامیتهای
تغییرناپذیر
مجاز باشد.
بهطور پیشفرض، Jujutsu از بازنویسی کامیتهایی که در مجموعه کامیتهای تغییرناپذیر پیکربندی شدهاند جلوگیری میکند. این گزینه آن بررسی را غیرفعال کرده و اجازه میدهد هر کامیتی بهجز کامیت ریشه (root commit) را بازنویسی کنید.
این گزینه تنها بر این بررسی تأثیر میگذارد و روی مجموعه بازنگری `immutable_heads()` یا کلمه کلیدی قالب `immutable` اثری ندارد.
- --at-operation <AT_OPERATION>
- عملیاتی که
مخزن باید
در نقطهٔ آن
بارگذاری
شود.
بهطور پیشفرض، Jujutsu مخزن را در تازهترین عملیات، یا در صورت وجود عملیاتهای واگرا، در نقطهٔ ادغام آنها بارگذاری میکند.
میتوانید از `--at-op=<operation ID>` استفاده کنید تا ببینید مخزن در یک عملیات پیشین چگونه بوده است. برای نمونه `jj --at-op=<operation ID> st` آنچه را که `jj st` در زمان پایان یافتن آن عملیات نشان میداد به شما نمایش میدهد. مقدار `--at-op=@` تقریباً همانند حالت پیشفرض عمل میکند، با این تفاوت که عملیاتهای واگرا هرگز ادغام نخواهند شد.
از دستور `jj op log` برای یافتن شناسه عملیات مورد نظر خود استفاده کنید. هر پیشوند یکتایی از شناسه عملیات کافی خواهد بود.
هنگام بارگذاری مخزن در یک عملیات پیشین، رونوشت کاری نادیده گرفته میشود، درست همانطور که گویی گزینهٔ `--ignore-working-copy` مشخص شده است.
اجرای دستورات تغییردهنده (mutating) هنگام بارگذاری مخزن در یک عملیات پیشین امکانپذیر است. انجام این کار معادل اجرای همزمان دستورات از مبدأ آن عملیات پیشین است. بهندرت دلیلی برای انجام چنین کاری وجود دارد، اما ممکن است.
- --debug
- فعالسازی ثبت وقایع اشکالزدایی (debug logging)
- --color <WHEN>
- تعیین زمان
استفاده از
رنگ در
خروجی
مقادیر ممکن:
- always
- never
- debug
- auto
- --quiet
- بیصدا
کردن
خروجیهای
غیر اصلی
دستور
برای نمونه، `jj file list` همچنان فایلها را فهرست میکند، اما به شما نمیگوید که آیا از رونوشت کاری اسنپشات گرفته شده یا نوادگان بازپایهریزی شدهاند یا خیر.
هشدارها و خطاها همچنان چاپ خواهند شد.
- --no-pager
- غیرفعال کردن صفحهبندیکننده (pager)
- --config <NAME=VALUE>
- گزینههای
پیکربندی
اضافی
(قابلیت
تکرار دارد)
نام باید بهصورت کلیدهای نقطهدار TOML مشخص شود. مقدار باید بهصورت یک عبارت TOML تعیین شود. اگر مقدار رشتهای درون ساختارهای TOML (مانند نشانهگذاری آرایه) محصور نشده باشد، میتوان از علامتهای نقلقول صرفنظر کرد.
- --config-file <PATH>
- فایلهای پیکربندی اضافی (قابلیت تکرار دارد)
| rebase |