از تاریخچههای commit نامرتب که مخازن Git شما را به هم میریزد و درخواستهای جذب میکنید خسته شدهاید؟ خوشبختانه، Git توانایی “squash commits” را دارد که چندین commit کوچک را در یک ادغام می کند. این کمک می کند تا تاریخچه کد شما تمیز و سازماندهی شده باشد و انجام آن با چند دستور آسان است.
چرا اسکواش متعهد می شود؟
یکی از قوانین طلایی آداب Git خوب این است که اغلب با پیامهای خوب که توضیح میدهند چه کاری انجام میدهند، متعهد شوید. با این حال، اگر تعداد زیادی از تعهدات انجام شود، این می تواند به سرعت تبدیل به یک مشکل شود. از این گذشته، هیچ کس نمیخواهد یک درخواست کشش را با 40 commit مختلف بررسی کند، همه آنها آماده ادغام در Master هستند – این به سادگی بیش از حد به هم ریخته است.
بنابراین، قبل از اینکه به یک مخزن راه دور مانند GitHub فشار دهید، تمرین خوبی است اسکواش آن commit ها، که همه آنها را در یک commit بزرگ ادغام می کند. همه پیامهای commit از آن commitها به “squash commit” اضافه میشوند تا زمانی که میخواهید آنها را به GitHub فشار دهید یا درخواست کشش خود را ارسال میکنید، هنوز همگی قابل مشاهده هستند.
همچنین همیشه لازم نیست که هر commit را از بین ببرید، زیرا گاهی اوقات اگر روی چندین فایل مختلف یا بخشهای مختلف مخزن کار میکنید، تقسیم چیزها خوب است. با این حال، اگر در طول زمان فقط چندین تغییر را در یک فایل واحد ایجاد میکنید، احتمالاً باید این commitها را از بین ببرید.
توجه به این نکته ضروری است شما نمی توانید commit هایی را که قبلاً به GitHub فشار داده شده اند، حل کنید بدون فشار نیرو که یک عملیات مخرب است. commit های Squashing تاریخچه Git را بازنویسی می کند، که اگر این کار را فقط روی دستگاه محلی خود انجام دهید خوب است. اگر این کار را در GitHub انجام میدهید، به فشار نیرو نیاز دارد، به این معنی که همه اعضای تیم شما باید مخزن را دوباره کلون کنند تا از درگیری جلوگیری کنند.
برای جلوگیری از این مشکلات، بهتر است قبل از فشار دادن به مخزن راه دور، commit ها را از بین ببرید. از آنجایی که معمولاً زمانی است که شما می خواهید این کار را به هر حال انجام دهید، معمولاً مشکلی نیست.
Squashing Git با ادغام git انجام می شود
چند راه مختلف برای اسکواش کردن ارتکاب وجود دارد، زیرا هیچ رسمی وجود ندارد.git squash
” فرمان یکی از ساده ترین آنها استفاده است git merge
با --squash
پرچم. این تکنیک آخرین N commit را با هم در یک ادغام می کند.
ابتدا، باید مطمئن شوید که مخزن شما کاملاً تمیز است و هیچ تغییر فعالی ندارد. می توانی چک کنی git status
برای تأیید اینکه هیچ تغییر محلی ندارید که با تنظیم مجدد دور ریخته شود.
در مرحله بعد، می خواهید شاخه را به موقعیتی که در آن بود بازنشانی کنید قبل از هر یک از تعهداتی که می خواهید با هم له کنید. به عنوان مثال، برای له کردن سه کامیت آخر، باید از آن استفاده کنید HEAD~3
، که از نظر فنی چهارمین commit در تاریخ است، اما هر سه کامیت squashable را از تاریخچه شما حذف می کند.
git reset --hard HEAD~3
همچنین می توانید از هش commit SHA-1 برای ارجاع مستقیم به یک commit استفاده کنید. بعد می دویم git merge --squash
، با هدف ادغام بودن HEAD@طراحی سایت با وردپرس
، که موقعیت HEAD قبل از آخرین دستور است.
git merge --squash 'HEAD@طراحی سایت با وردپرس'
Git قبلاً تمام تغییرات را با پیام commit مناسب در این مرحله انجام داده است، اما باید متعهد شود:
git commit
پس از انجام این کار، شما آزاد هستید که تمام تعهدات را به مخزن منبع بالادستی خود فشار دهید.
کنترل بیشتر بر Squashing با Rebase تعاملی
اگر نمیخواهید همه چیز را به یک بیت متعهد تبدیل کنید، میتوانید یک rebase تعاملی انجام دهید تا فقط commitهایی را انتخاب کنید که میخواهید له کنید. Rebasing می تواند پیچیده باشد، اما انجام آن با مراحل صحیح آسان است.
ابتدا، rebase تعاملی را با هدف قرار دادن commit قبل از آخرین commit squashable شروع کنید:
git rebase -i HEAD~3
با این کار یک ویرایشگر متن باز می شود، جایی که می خواهید برای هر کامیتی که می خواهید ادغام کنید، «انتخاب» را به «اسکواش» تغییر دهید.
سپس Git ویرایشگر دیگری را باز می کند و به شما امکان می دهد یک پیام commit جدید برای commit ترکیبی ایجاد کنید. این را ذخیره کنید، و rebase باید تمام شود.
تغییر دادن به این روش، تمام commit های له شده را در commit بعدی بالای آنها ادغام می کند. در این حالت کامیت های دوم و سوم در کامیت اول ادغام شدند.
Squashing Git با Git GUI انجام می شود
مانند بسیاری از اکشنها در Git، squashing commitها با یک رابط بسیار سادهتر از به خاطر سپردن و تایپ دستورات هر بار است. در واقع، در GitKraken، میتوانید به سادگی روی commitهایی که میخواهید له کنید، کلیک کنید و روی «Squash 2 commits» کلیک راست کنید:
برای کسب اطلاعات بیشتر می توانید راهنمای ما را در مورد مشتریان GUI Git بخوانید.
مربوط: آیا باید از GUI Git Client استفاده کنید؟
سایت محتوا مارکتینگ
برای دیدن مطالب آموزشی بیشتر در زمینه سخت افزار و نرم افزار اینجا کلیک کنید!