ویرگول
ورودثبت نام
Ali Ebrahimnezhad
Ali EbrahimnezhadWeb Developer علاقه مند به یادگیری
Ali Ebrahimnezhad
Ali Ebrahimnezhad
خواندن ۱ دقیقه·۱ ماه پیش

چطور با Git Squash تاریخچه پروژه راتمیز نگه داریم ؟

سلام به همگی !

احتمالاً موقع کار روی یک پروژه تیمی یا وقتی می‌خواستید برای یک پروژه Open-source یک Pull Request یا Merge Request باز کنید، به اصطلاح Squash برخورد کرده‌اید.

​ماجرا از این قرار است که گاهی برای اعمال یک تغییر ساده در پروژه چندین کامیت مختلف ثبت می‌کنیم (که هر کدام تغییرات خیلی کوچکی دارند) این موضوع اصلاً برای مدیران پروژه خوب نیست چون بررسی کدها و دیباگ کردن را سخت می‌کنه و تاریخچه (History) پروژه را برای یک تغییر کوچک، بیش از حد طولانی و شلوغ می‌کنه.گیت برای این مشکل یک راه‌حل ساده داره: Squash.​

Squashing در واقع به معنی فشرده‌سازی چندین کامیت و تبدیل آن‌ها به یک کامیت واحد است. این کار باعث می‌شود تاریخچه گیت شما همیشه تمیز و مرتب باقی بمونه.​روش کار:به عنوان مثال، برای Squashing سه کامیت آخر از HEAD می‌توانید از دستور Interactive Rebase استفاده کنید:

git rebase -i HEAD~3

با اجرای این دستور، یک ویرایشگر باز می‌شود که لیست کامیت‌ها را با برچسب pick نشان می‌دهد. کافیست اولین کامیت را روی حالت pick باقی بگذارید و بقیه را به squash (یا به اختصار s) تغییر دهید. در نهایت، هر سه کامیت با هم ادغام شده و تبدیل به یک کامیت واحد می‌شوند.​

اسکرین‌شات‌هایی از لاگِ گیت (قبل و بعد از Squashing) و نحوه squash کردن

تغییر pick ها به squash
تغییر pick ها به squash
تصویر سمت چپ قبل از Squashing و تصویر سمت راست بعد از Squashing هست
تصویر سمت چپ قبل از Squashing و تصویر سمت راست بعد از Squashing هست

نکات مهم:

استفاده از Squash بسیار کاربردی است، اما چون باعث بازنویسی تاریخچه (Rewriting History) می‌شود نباید در استفاده از آن زیاده‌روی کنید به‌خصوص اگر آن تغییرات را قبلاً Push کرده‌اید و با هم‌تیمی‌هایتان به اشتراک گذاشته‌اید.Squashing روی شاخه‌های مشترک می‌تواند باعث ایجاد Conflict یا به هم ریختن تاریخچه برای دیگران شود. پس بهتره فقط روی کامیت‌های خودتان (قبل از انتشار نهایی) این کار را انجام دهید.

امیدوارم این مطلب برایتان مفید بوده باشد. اگر سوالی داشتید یا پیشنهادی برای کامل‌تر شدن این بحث دارید خوشحال میشم بهم بگین .

open sourcegit
۵
۰
Ali Ebrahimnezhad
Ali Ebrahimnezhad
Web Developer علاقه مند به یادگیری
شاید از این پست‌ها خوشتان بیاید