چشم انداز مهندسی نرم افزار دائما در حال تغییر است. به روز ماندن در مورد فناوری های جدید کاملاً حیاتی است.

اما به‌عنوان توسعه‌دهندگان، گاهی اوقات فراموش می‌کنیم که چقدر مهم است که در فناوری‌های آزمایش شده و واقعی که ستون فقرات توسعه نرم‌افزار هستند – مانند سیستم‌های کنترل نسخه مانند Git کاوش کنیم.

در این مقاله، ما نگاهی به جایگزینی برای دستور ادغام git خواهیم داشت. آن جایگزین git rebase است.

آشنایی با Git Rebase

Git rebase یک ویژگی قدرتمند Git است که توانایی بازنویسی و سازماندهی مجدد تاریخچه commit شما را دارد. Git rebase به شما این امکان را می دهد که پایه شاخه خود را تغییر دهید.

برخلاف ادغام که یک commit جدید ادغام ایجاد می کند و تاریخچه هر دو شاخه را با هم ترکیب می کند، rebasing commit های یک شاخه را به شاخه دیگر بازپخش می کند. این منجر به یک تاریخچه ارتکاب خطی می شود که خواندن و درک آن را آسان تر می کند.

تنظیم صحنه با Git Merge

تفاوت بین git merge و git rebase را متوجه نشدید؟ بیایید یک مثال را در نظر بگیریم. شما در حال کار بر روی یک تغییر جدید هستید، بنابراین یک شعبه جدید ایجاد می کنید git checkout -b. سپس تغییراتی را در شعبه جدید خود اعمال می کنید.

KzlG4wOQ_D3M6THap-VPhIQaRsYs2_PjXrbwwzru4fiYmAorZZJLMUl0SqH6MeTCLDXE5rHtpzpLztENpFBRXMcM0EFbUS-mb3cnOuC7kSgsiTvPxMdKs H4SFjL5_E
تصویر ارتکاب اولیه

در این بین، شخص دیگری که روی بخش جداگانه ای از سیستم کار می کند، در Pull Request خودش ادغام می شود! تاریخچه git اکنون کمی شبیه به این است، زیرا آنها هیچ زمینه یا دانشی از تغییرات شما ندارند.

qLOwHczX8I02UWtZ5ymTVSvaaXB9760kv0UhDDx-e3eOPtjM93jNhsxTHePfyWL0OBrAxEgR8X9mRgUg_U-q0AHtSnZDad5HJyZeEMXBhWhW0xLx0AHtSnZDad5HJyZeEMXBhWhW0xL6 HJCdxf81XCex5FIR8
به عنوان مثال از git، هم تیمی شما commit های جدیدی را انجام داد.

تغییرات خود را با آخرین کامیت نهایی به پایان می رسانید. اما برای بازگرداندن آن به شعبه اصلی چه کاری انجام می دهید؟

پیشنهاد می‌کنیم بخوانید:  کشیدن و رها کردن در جاوا اسکریپت Vanilla عمل انتخاب یک آیتم یا تکه‌ای از متن، جابجایی آن (کشیدن) و سپس قرار دادن آن (رها کردن) در مکانی دیگر به عنوان قابلیت کشیدن و رها کردن شناخته می‌شود. اکثر مرورگرها انتخاب متن، تصاویر و پیوندها را به طور پیش فرض قابل کشیدن می کنند. برای مثال، اگر تصاویر یا نشان‌واره‌های مبتنی بر تصویر را بکشید روی هر ...
1mzTfQy7U1z6hMtin6JHIpJofRSoeElpHJcflmFIE2niq16PP-GlqWn6ebw1O0TKTmivUVJPOh3oaCc6sVOB751x3TDJNDVgXiVgmVMb2Hb2Hq3KfW1 gaqT64EU
تصویر git، با یک commit اضافی در شاخه شما

خوب، شما دو گزینه دارید. اگر قبلاً از Git استفاده کرده باشید، دستوری است که احتمالاً با آن آشنا هستید: git merge. نتیجه نهایی کمی شبیه به این است.

S4eILyjWjxrmlBThz1q2wKQgSddVJ0QGkGTUiDP2y_f3TX1NoMNRfVkmklgmLDICBeRyBPVUOdeD7HbGs6HzSszEv01pXl8TWxhLSEKqW84MVcVsVec goOfetVHYu4
تصویر git، با یک ادغام اضافی

همانطور که می بینید، ما یک commit اضافی فقط برای ادغام داریم. تاریخ از اینجا ادامه دارد و این خوب است! بسیاری از کدنویس ها با استفاده از commit های ادغام به خوبی کار می کنند. اما اگر شعبه ای با عمر طولانی تری داشته باشید که باید آن را به روز نگه دارید، چه؟

در این مورد، ما روی شاخه ای به نام کار می کنیم foo. تعهدات ما آنهایی هستند که نظرات دارند، some other thing، adding test، و addressing comments. نگاهی به تاریخ بیندازید.

RVMAGg4oPs1DSX6gFjo1CClg4Vtl6uLmc_-sWsb9dkw-5bxPRTWkSVPVR7C-vCLobok6kpWU942RtRJPwq8xP_p5HuA0mJSdrH7dx2KFJ0HL HFqu8vSQkPkQchDI
تاریخچه Git با ادغام

آن ها Merge branch ‘main’ into foo commit ها چندان مفید به نظر نمی رسند – آنها صرفاً لجستیکی هستند و در واقع تغییراتی را که در شعبه خود ایجاد می کنید را توصیف نمی کنند. همچنین کمی سخت است که در مورد تغییرات متوالی که در شعبه فعلی خود ایجاد کرده اید، هنگام نگاه کردن به تاریخچه Git خود استدلال کنید.

نحوه انجام rebase

بیایید جایگزین را با git rebase بررسی کنیم. با در نظر گرفتن مثال بالا، بیایید با commit نهایی خود درست قبل از اینکه آماده ادغام مجدد در main.

1mzTfQy7U1z6hMtin6JHIpJofRSoeElpHJcflmFIE2niq16PP-GlqWn6ebw1O0TKTmivUVJPOh3oaCc6sVOB751x3TDJNDVgXiVgmVMb2Hb2Hq3KfW1 gaqT64EU
کیس پایه

این بار، ما یک rebase git را انجام می دهیم. این در واقع commit های شما را دوباره پخش می کند بر روی از commit های جدید (معروف به HEAD) از main، جلوگیری از ادغام commit.

‌ Y_qrbEveA6_jk
تصویرسازی مجدد

پس چگونه این کار را انجام دهیم؟ در حالی که در شاخه جانبی خود هستید (در مورد ما، foo)، می خواهید کارهای زیر را انجام دهید.

  1. به خود تغییر دهید main شعبه با git checkout main
  2. محلی خود را به روز کنید main شعبه با git pull. این بدین ترتیب است که ما جدیدترین HEAD را داریم main برای rebase موجود است.
  3. به شعبه خود برگردید foo با git checkout foo
  4. استفاده کنید git rebase main، با این کار rebase کامل می شود و commit های شما در بالای HEAD از دوباره پخش می شوند main.

در مقایسه با مثال قبلی، با همان commit های «چیز دیگری»، «افزودن آزمایش» و «آدرس کردن نظرات» چگونه به نظر می رسد؟

پیشنهاد می‌کنیم بخوانید:  چگونه دستورات Git خود را با نام مستعار Git ساده کنید
aS-mY0pqWfzcT-uIvvILDMouHOys4MEtiORn_jpVk479QVopePBM-2h4YwiW4Do5k7127Gkb_dbYfWuGyr508Te2ISmsWQgEgSRK3qxY82pNjPbSy7Ny82pNjPz7BY82pNjPc7Ny D9uBhxpUMvg
Cleaner commit history با git rebase

بسیار خوب! تمیزتر است، و با نگاهی به تاریخچه شعبه من، استدلال در مورد تغییرات در شعبه من بسیار ساده است. من فقط باید بدانم از کجا شروع کردم (commit hash 2a2db46).

Rebase Best Practices

در حالی که rebase git بدون شک سابقه تعهد شما را تمیزتر نگه می دارد، چند نکته وجود دارد که باید به آنها توجه داشت:

  • از rebase استفاده کنید فقط برای شعب محلی شاخه هایی را که دیگران روی آن کار می کنند تغییر ندهید. Rebase تغییر می کند تاریخچه ارتکاب، و دیگران در مورد آن نمی دانند.
  • به طور منظم شعبه های محلی خود را واکشی و تغییر دهید تا با شعبه اصلی به روز بمانید. درگیری ها کثیف می شوند! زودتر و اغلب بازبینی کنید.

نتیجه

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

در این مقاله نگاهی انداختیم به git rebaseو مثالی زد که چرا rebasing می تواند ابزار خوبی در جعبه ابزار شما باشد.

تغییر پایه مبارک!