HG(GRAFT) HG(GRAFT)

hg graft - کپی کردن تغییرات از شاخه‌های دیگر روی شاخه فعلی

hg graft [OPTION]... [-r REV]... REV...

این دستور از منطق ادغام (merge) مرکوریال برای کپی کردن تغییرات منفرد از شاخه‌های دیگر بدون ادغام کامل شاخه‌ها در گراف تاریخچه استفاده می‌کند. این عمل گاهی با نام «backporting» یا «cherry-picking» نیز شناخته می‌شود. به‌طور پیش‌فرض، graft کاربر، تاریخ و توضیحات را از مجموعه‌تغییرات (changeset) مبدأ کپی خواهد کرد.

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

اگر --log مشخص شود، به پیام‌های گزارش یادداشتی به این شکل الحاق خواهد شد:

(grafted from CHANGESETHASH)

اگر --force مشخص شود، بازنگری‌ها حتی اگر نیاکان مقصد باشند یا قبلاً به آن پیوند خورده باشند نیز پیوند خواهند خورد. این مورد زمانی کاربرد دارد که بازنگری‌ها از آن زمان به بعد بازگردانی (backed out) شده باشند.

اگر ادغام graft به تداخل (conflict) منجر شود، فرایند graft متوقف می‌شود تا تداخل ادغام فعلی به‌صورت دستی حل شود. پس از برطرف شدن تمام تداخل‌ها، فرایند graft می‌تواند با گزینه -c/--continue ادامه یابد.

گزینه -c/--continue تمام گزینه‌های قبلی را مجدداً اعمال می‌کند.

گزینه --base جزئیات بیشتری از نحوه استفاده درونی graft از merge با یک بازنگری پایه سفارشی را نمایان می‌سازد. از --base می‌توان برای مشخص کردن نیاکانی غیر از اولین و تنها والد استفاده کرد.

دستور:

hg graft -r 345 --base 234

تقریباً معادل دستور زیر عمل می‌کند:

hg diff --from 234 --to 345 | hg import

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

بنابراین می‌توان نتیجه یک ادغام را با تعیین یکی از والدین ادغام به‌عنوان پایه، در قالب یک کامیت واحد بک‌پورت (backport) کرد و عملاً تغییرات را از طرف دیگر پیوند زد.

همچنین می‌توان با مشخص کردن یک نیاکان دیگر به‌عنوان پایه، چندین مجموعه‌تغییرات را تجمیع (collapse) کرده و تاریخچه را مرتب کرد، رفتاری مشابه با rebase --collapse --keep.

پیام کامیت را می‌توان پس از انجام کار با استفاده از commit --amend تغییر داد.

برای استفاده از غیرنیاکان به‌عنوان پایه جهت بازگرداندن تغییرات، دستور backout و گزینه پنهان --parent را ببینید.

گزینه آزمایشی --to امکان پیوند زدن یک بازنگری در حافظه و مستقل از رونوشت کاری (working copy) را فراهم می‌کند. در حال حاضر از تداخل‌های ادغام پشتیبانی نمی‌شود و اگر ابزار پیکربندی‌شده نتواند تداخل‌های احتمالی را برطرف کند، عملیات لغو خواهد شد.

از آنجا که عملیات در حافظه انجام می‌شود، فایل‌های روی دیسک تغییر نخواهند کرد و ممکن است برخی قلاب‌ها (hooks) اجرا نشوند.

مثال‌ها:

  • کپی کردن یک تغییر منفرد به شاخه stable و ویرایش توضیحات آن:
    hg update stable
    hg graft --edit 9393
  • پیوند زدن بازه‌ای از مجموعه‌تغییرات به استثنای یک مورد، و به‌روزرسانی تاریخ‌ها:
    hg graft -D "2085::2093 and not 2091"
  • ادامه دادن graft پس از حل تداخل‌ها:
    hg graft -c
  • نمایش مبدأ یک مجموعه‌تغییرات پیوندزده‌شده:
    hg log --debug -r .
  • نمایش بازنگری‌های مرتب‌شده بر اساس تاریخ:
    hg log -r "sort(all(), date)"
  • بک‌پورت کردن نتیجه یک ادغام به‌عنوان یک کامیت واحد:
    hg graft -r 123 --base 123^
  • آوردن یک شاخه ویژگی به عنوان یک مجموعه‌تغییرات واحد:
    hg up -cr default
    hg graft -r featureX --base "ancestor('featureX', 'default')"

    برای اطلاعات بیشتر درباره مشخص کردن بازنگری‌ها، %hg help revisions را ببینید.

    در صورت اتمام موفقیت‌آمیز مقدار 0 و در صورت وجود فایل‌های حل‌نشده مقدار 1 برگردانده می‌شود.

بازنگری‌ها برای پیوند زدن
بازنگری پایه هنگام انجام ادغام graft (پیشرفته)
پیوند زدن به این مقصد، در حافظه (آزمایشی)
ادامه دادن graft متوقف‌شده
متوقف کردن graft ناتمام
لغو کردن graft متوقف‌شده
فراخوانی ویرایشگر برای پیام‌های کامیت
الحاق اطلاعات graft به پیام گزارش
بدون ثبت کامیت، تنها تغییرات در دایرکتوری کاری اعمال شوند
اجبار در انجام graft
ثبت تاریخ فعلی به‌عنوان تاریخ کامیت
ثبت کاربر فعلی به‌عنوان کامیت‌کننده
ثبت تاریخ مشخص‌شده به‌عنوان تاریخ کامیت
ثبت کاربر مشخص‌شده به‌عنوان کامیت‌کننده
مشخص کردن ابزار ادغام
عدم انجام عملیات، تنها خروجی چاپ شود

گزینه‌های علامت‌گذاری‌شده با [+] می‌توانند چند بار مشخص شوند