اگر روی یک پروژه کار می‌کنید و سعی می‌کنید یک ویژگی جدید را پیاده‌سازی کنید، ممکن است چند بار کد خود را برای آزمایش چیزها متعهد کنید. این به شما امکان می دهد ببینید که کد چگونه کار می کند یا ظاهر می شود.

در حین انجام این کار، ممکن است همه چیز به هم بریزد زیرا اکنون چندین تعهد دارید، حتی برای کارهایی که ضروری نیستند.

به همین دلیل، ممکن است بخواهید همه آن commit ها را در یک commit ترکیب کنید. این فرآیند نامیده می شود مرتکب له کردن.

در این مقاله، من به شما نشان خواهم داد که چگونه commit squashing در Git کار می کند تا بتوانید چندین commit نامرتب یا غیر ضروری را در یک commit بدون از دست دادن تغییرات خود ترکیب کنید.

چگونه در Git با Rebase تعاملی commit ها را اسکواش کنیم

در این فرآیند، شما تمام تعهدات را با git rebase فرمان با i پرچم گذاری کنید و آنها را کنار هم قرار دهید squash. به غیر از له کردن، این دستور همچنین به شما اجازه می‌دهد تا commit‌ها را حذف کنید، پیام‌های commit را بازنویسی کنید و فایل‌های جدید اضافه کنید.

من این commit ها را دارم که می خواهم در یکی ترکیب کنم:

اسکرین شات-2023-03-22-at-11.10.52

توجه داشته باشید که من دو شعبه دارم – main و new-feature. من می‌خواهم تمام تعهدات را از بین ببرم new-feature شاخه به یک commit

من می توانستم آن تعهدات را ببینم زیرا فرمان را اجرا کردم git log --oneline. آنها همچنین قبلاً در GitHub هستند:

اسکرین شات-2023-03-22-at-11.11.23

اولین کاری که باید انجام دهید این است که به Git بگویید تا چه اندازه می خواهید مجدداً تغییر دهید. بنابراین اگر می‌خواهید تمام آن تعهدات را از بین ببرید new-feature با هم شاخه کنید، باید 6 commit به عقب برگردید.

پیشنهاد می‌کنیم بخوانید:  چگونه یک شمارش معکوس تاریخ با جاوا اسکریپت وانیلی بسازیم تایمر شمارش معکوس یک ساعت مجازی است که شمارش معکوس را از یک تاریخ خاص شروع می کند (یا متوقف می شود) تا شروع (یا پایان) یک رویداد را مشخص کند. آنها معمولا استفاده می شوند روی فرود page از یک وب سایت تجارت الکترونیک، وب سایت های در حال ساخت، صفحات رویدادها و مکان های مختلف دیگر. آنها معمولا استفاده می شوند ...

برای انجام این کار این دستور را اجرا کنید:

git rebase -i HEAD~6

با این کار ویرایشگر انتخابی شما برای Git باز می شود. پیش فرض Vim است، اما در مورد من، VS Code است. این چیزی است که ویرایشگر به نظر می رسد:

اسکرین شات-2023-03-22-at-11.28.12

اکنون، شما باید همه آنها را جایگزین کنید pick با squash (یا به سادگی s) جدا از اولی.

توجه داشته باشید: pick یا p فقط از آن تعهدات استفاده خواهد کرد، اما squash یا s از آنها استفاده خواهد کرد و همه آنها را با هم ترکیب می کند.

اولین commit همانی است که بدون از دست دادن تغییرات خود، آنها را با هم ترکیب می کنید.

پس از انجام این کار، فایل را ذخیره کرده و ببندید. Git ویرایشگر دیگری را باز می کند که در آن می توانید پیام commit جدیدی را که برای شما ایجاد می کند مشاهده کنید:

اسکرین شات-2023-03-22-at-11.36.02

می توانید از شر همه آنها خلاص شوید و پیام سفارشی خود را اضافه کنید:

اسکرین شات-2023-03-22-at-11.37.45

یا می توانید آن را همانطور که هست بگذارید. اگر پیام commit جدیدی اضافه کردید، فایل را ذخیره کرده و ببندید.

پس از انجام این کار، باید پیام موفقیت آمیز را در ترمینال مشاهده کنید.

با اجرا کردن، دوباره گزارش Git خود را بررسی کنید git log --oneline و باید ببینید که تمام commit ها با هم ترکیب شده اند:

اسکرین شات-2023-03-22-at-11.41.21

به یاد داشته باشید که پیام commit جدید “آماده برای استقرار” است. اگر شاخه خود را به Git فشار دهید، یک پیام commit نیز خواهید دید:

اسکرین شات-2023-03-22-at-11.43.07

نحوه اسکواش کامیت در گیت با استفاده از merge فرمان و --squash پرچم

هنگامی که می خواهید شاخه ها را ادغام کنید، می توانید چندین commit را در یکی ترکیب کنید.

این به پاکسازی شاخه ورودی از تعهدات اضافی کمک می کند. نقطه ضعف این روش این است که شما کنترل زیادی در اختیار ندارید rebase.

برای این کار، له کردنی که در مرحله آخر انجام دادم را با دویدن خنثی می کنم git reset --hard HEAD@{7}.

در حال دویدن git log --oneline دوباره، من می توانم یک بار دیگر تمام commit ها را ببینم:

پیشنهاد می‌کنیم بخوانید:  ذخیره اشیاء در localStorage/sessionStorage به عنوان یک توسعه دهنده وب، احتمالاً با نیاز به ماندگاری داده ها در جلسات مختلف یا حتی برگه ها در مرورگر مواجه شده اید. اینجا جایی است که LocalStorage و sessionStorage HTML5 مفید هستند. این دو شی ذخیره سازی وب به شما امکان می دهند داده ها را مستقیماً در مرورگر کاربر ذخیره کنید، بدون نیاز به کد سمت سرور ...

اسکرین شات-2023-03-22-at-11.54.06

من دوباره شاخه را به GitHub هل دادم، بنابراین می توانم آن commit ها را در آنجا نیز ببینم:

اسکرین شات-2023-03-22-at-11.56.32

در حال حاضر، برای انجام له کردن با git merge دستور، من قصد دارم با اجرا به شاخه اصلی سوئیچ کنم git switch main.

برای ادغام new-feature شعبه به main و commit ها را در آنجا له کنید، من از آن استفاده خواهم کرد git merge فرمان با --squash پرچم:

git merge --squash new-feature

اگر بدوید git log --oneline در این مرحله، هیچ تعهدی در مورد آن نخواهید داشت new-feature هنوز شعبه:

اسکرین شات-2023-03-22-at-12.00.25

اما اگر بدوید git status، تغییرات و فایل هایی را که باید انجام دهید را مشاهده خواهید کرد:

اسکرین شات-2023-03-22-at-12.01.11

اگر از VS Code استفاده می‌کنید، تب Git را نیز خواهید دید که نشان می‌دهد باید تغییراتی را انجام دهید:

اسکرین شات-2023-03-22-at-12.02.24

حال فایل ها را با یک پیام مناسب commit کنید. پس از آن، اجرا کنید git log --oneline و پیام commit جدید خود را خواهید دید:

اسکرین شات-2023-03-22-at-12.04.33

پس از فشار دادن به main، ایجاد یک درخواست کشش در GitHub و ادغام آن، این چیزی است که من در main شاخه:

اسکرین شات-2023-03-22-at-12.09.12

نتیجه

این مقاله به شما نشان داد که چگونه چندین commit را به دو روش مختلف به یک commit تبدیل کنید. مهم نیست گزینه ای را که انتخاب می کنید، هدف نهایی ترکیب کردن تعهدات محقق می شود.

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

ممنون که خواندید. اگر این مقاله برای شما مفید بود، آن را با دوستان و خانواده خود به اشتراک بگذارید.