gh stack؛ پولریکوئستهای زنجیرهای با یه دستور
خلاصهٔ کاملتر
به گفتهی مستندات گیتهاب، gh stack یه افزونه برای GitHub CLI (نسخهی v2.0 به بالا) هست که با gh extension install github/gh-stack نصب میشه. ایدهش اینه که یه تغییر بزرگ رو به زنجیرهای از PRهای کوچیک و قابلریویو بشکنی؛ هر شاخه روی شاخهی زیرش سواره و پایینترینشون به شاخهی trunk (معمولاً main) وصله. موقع submit برای هر شاخه یه PR ساخته میشه و base هر PR روی شاخهی زیریش تنظیم میشه، پس ریویوئر فقط دیف همون لایه رو میبینه.
جریان کارش کوتاهه: استک رو میسازی، لایهی بعدی رو میذاری روش و آخرش همه رو یکجا میفرستی.
gh stack init
gh stack add api-endpoints
gh stack push
gh stack submitسختترین بخش کار با استک، همگام نگهداشتنشه و gh stack rebase همینو خودکار میکنه: از ریموت fetch میکنه و شاخهها رو از trunk به بالا آبشاری ریبیس میکنه، و اگه PRای قبلاً مرج شده باشه خودش به حالت --onto سوییچ میکنه. سر کانفلیکت مکث میکنه تا حلش کنی، یا با --abort کل استک به حالت قبلش برمیگرده. موقع init هم git rerere خودکار روشن میشه تا حلکانفلیکتها بین ریبیسها یادش بمونه.
gh stack sync کل چرخه رو تو یه دستور جمع میکنه: fetch، هماهنگکردن استک محلی با گیتهاب، فستفوروارد trunk، ریبیس آبشاری، push و آپدیت وضعیت PRها و آخرش پاککردن شاخههای مرجشده. gh stack merge هم چند PR استک رو یکجا و همهیاهیچ مرج میکنه؛ اگه یکیشون مرج نشه، هیچکدوم نمیشن. متادیتای استک تو .git/gh-stack میمونه و کامیت نمیشه، و برای کسایی که محلی با jj یا Sapling کار میکنن gh stack link فقط PRها رو روی گیتهاب به هم زنجیر میکنه.
نکات کلیدی:
- نصب با gh extension install github/gh-stack و نیازمند GitHub CLI نسخهی v2.0 به بالا
- هر شاخه روی شاخهی زیرش سواره و base هر PR خودکار تنظیم میشه
- gh stack rebase ریبیس آبشاری میکنه و git rerere رو خودش روشن میکنه
- gh stack sync یعنی fetch و ریبیس و push و آپدیت PRها با یه دستور
- gh stack merge کل استک رو همهیاهیچ مرج میکنه و gh stack link برای کاربرهای jj و Sapling هست




