از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
Git Squash Commits – له کردن آخرین N commit در یک Commit
سرفصلهای مطلب
اگر روی یک پروژه کار میکنید و سعی میکنید یک ویژگی جدید را پیادهسازی کنید، ممکن است چند بار کد خود را برای آزمایش چیزها متعهد کنید. این به شما امکان می دهد ببینید که کد چگونه کار می کند یا ظاهر می شود.
در حین انجام این کار، ممکن است همه چیز به هم بریزد زیرا اکنون چندین تعهد دارید، حتی برای کارهایی که ضروری نیستند.
به همین دلیل، ممکن است بخواهید همه آن commit ها را در یک commit ترکیب کنید. این فرآیند نامیده می شود مرتکب له کردن.
در این مقاله، من به شما نشان خواهم داد که چگونه commit squashing در Git کار می کند تا بتوانید چندین commit نامرتب یا غیر ضروری را در یک commit بدون از دست دادن تغییرات خود ترکیب کنید.
چگونه در Git با Rebase تعاملی commit ها را اسکواش کنیم
در این فرآیند، شما تمام تعهدات را با git rebase
فرمان با i
پرچم گذاری کنید و آنها را کنار هم قرار دهید squash
. به غیر از له کردن، این دستور همچنین به شما اجازه میدهد تا commitها را حذف کنید، پیامهای commit را بازنویسی کنید و فایلهای جدید اضافه کنید.
من این commit ها را دارم که می خواهم در یکی ترکیب کنم:
توجه داشته باشید که من دو شعبه دارم – main
و new-feature
. من میخواهم تمام تعهدات را از بین ببرم new-feature
شاخه به یک commit
من می توانستم آن تعهدات را ببینم زیرا فرمان را اجرا کردم git log --oneline
. آنها همچنین قبلاً در GitHub هستند:
اولین کاری که باید انجام دهید این است که به Git بگویید تا چه اندازه می خواهید مجدداً تغییر دهید. بنابراین اگر میخواهید تمام آن تعهدات را از بین ببرید new-feature
با هم شاخه کنید، باید 6 commit به عقب برگردید.
برای انجام این کار این دستور را اجرا کنید:
git rebase -i HEAD~6
با این کار ویرایشگر انتخابی شما برای Git باز می شود. پیش فرض Vim است، اما در مورد من، VS Code است. این چیزی است که ویرایشگر به نظر می رسد:
اکنون، شما باید همه آنها را جایگزین کنید pick
با squash
(یا به سادگی s
) جدا از اولی.
توجه داشته باشید: pick
یا p
فقط از آن تعهدات استفاده خواهد کرد، اما squash
یا s
از آنها استفاده خواهد کرد و همه آنها را با هم ترکیب می کند.
اولین commit همانی است که بدون از دست دادن تغییرات خود، آنها را با هم ترکیب می کنید.
پس از انجام این کار، فایل را ذخیره کرده و ببندید. Git ویرایشگر دیگری را باز می کند که در آن می توانید پیام commit جدیدی را که برای شما ایجاد می کند مشاهده کنید:
می توانید از شر همه آنها خلاص شوید و پیام سفارشی خود را اضافه کنید:
یا می توانید آن را همانطور که هست بگذارید. اگر پیام commit جدیدی اضافه کردید، فایل را ذخیره کرده و ببندید.
پس از انجام این کار، باید پیام موفقیت آمیز را در ترمینال مشاهده کنید.
با اجرا کردن، دوباره گزارش Git خود را بررسی کنید git log --oneline
و باید ببینید که تمام commit ها با هم ترکیب شده اند:
به یاد داشته باشید که پیام commit جدید “آماده برای استقرار” است. اگر شاخه خود را به Git فشار دهید، یک پیام commit نیز خواهید دید:
نحوه اسکواش کامیت در گیت با استفاده از merge
فرمان و --squash
پرچم
هنگامی که می خواهید شاخه ها را ادغام کنید، می توانید چندین commit را در یکی ترکیب کنید.
این به پاکسازی شاخه ورودی از تعهدات اضافی کمک می کند. نقطه ضعف این روش این است که شما کنترل زیادی در اختیار ندارید rebase
.
برای این کار، له کردنی که در مرحله آخر انجام دادم را با دویدن خنثی می کنم git reset --hard HEAD@{7}
.
در حال دویدن git log --oneline
دوباره، من می توانم یک بار دیگر تمام commit ها را ببینم:
من دوباره شاخه را به GitHub هل دادم، بنابراین می توانم آن commit ها را در آنجا نیز ببینم:
در حال حاضر، برای انجام له کردن با git merge
دستور، من قصد دارم با اجرا به شاخه اصلی سوئیچ کنم git switch main
.
برای ادغام new-feature
شعبه به main
و commit ها را در آنجا له کنید، من از آن استفاده خواهم کرد git merge
فرمان با --squash
پرچم:
git merge --squash new-feature
اگر بدوید git log --oneline
در این مرحله، هیچ تعهدی در مورد آن نخواهید داشت new-feature
هنوز شعبه:
اما اگر بدوید git status
، تغییرات و فایل هایی را که باید انجام دهید را مشاهده خواهید کرد:
اگر از VS Code استفاده میکنید، تب Git را نیز خواهید دید که نشان میدهد باید تغییراتی را انجام دهید:
حال فایل ها را با یک پیام مناسب commit کنید. پس از آن، اجرا کنید git log --oneline
و پیام commit جدید خود را خواهید دید:
پس از فشار دادن به main، ایجاد یک درخواست کشش در GitHub و ادغام آن، این چیزی است که من در main
شاخه:
نتیجه
این مقاله به شما نشان داد که چگونه چندین commit را به دو روش مختلف به یک commit تبدیل کنید. مهم نیست گزینه ای را که انتخاب می کنید، هدف نهایی ترکیب کردن تعهدات محقق می شود.
اگر می خواهید کنترل بیشتری داشته باشید، می توانید از آن استفاده کنید rebase
با i
گزینه پرچم اما اگر نمیخواهید این فرآیند را طی کنید، میتوانید در حین ادغام، commitها را از بین ببرید. فقط توجه داشته باشید که با آن گزینه، باید تغییرات خود را دوباره انجام دهید.
ممنون که خواندید. اگر این مقاله برای شما مفید بود، آن را با دوستان و خانواده خود به اشتراک بگذارید.
منتشر شده در 1402-12-26 13:18:05