برنامه نویسی

روز 9/30 -ادغام git -squash -تعهدات متعدد را در یک مورد ترکیب کنید

چیست git merge --squash؟

هنگام استفاده git merge --squash، git تمام تغییراتی را از شاخه ای که ادغام می کنید گرفته و آنها را در یک ترکیب می کند تعهد جدید در شعبه فعلی خود ، به جای حفظ تعهدات فردی یا ایجاد تعهد ادغام.

مثال ساده

تصور کنید که دارید:

  • شاخه اصلی با پرونده های A و B
  • شعبه ویژگی ای که در آن 3 تعهد ساخته اید: پرونده C اضافه شده پرونده اصلاح شده یک اشکال در فایل B ادغام عادی:
git checkout main
git merge feature
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

این هر 3 تعهد را در تاریخ اصلی نگه می دارد.

ادغام کدو:

git checkout main
git merge --squash feature
git commit -m "Implemented new feature"
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

این یک تعهد جدید در اصلی با تمام تغییرات ترکیب شده ایجاد می کند.

نکات و ترفندها

1. قبل از ارتکاب تغییرات را تأیید کنید

بعد از خرد کردن اما قبل از ارتکاب:

git status  # Shows all staged changes
git diff --cached  # Review what will be committed
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

2. با rebase تعاملی ترکیب کنید

برای کنترل حتی بیشتر:

git checkout feature
git rebase -i main  # Squash commits interactively
git checkout main
git merge feature  # Now a fast-forward
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

3. شاخه اصلی را حفظ کنید

اگر ممکن است به شاخه اصلی نیاز داشته باشید:

git checkout -b feature-squashed
git merge --squash feature
git commit -m "Squashed version"
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید


تفاوت های عملی بین --squash واد --no-ff

یاد گرفتن --no-ff اینجا
بازگشت:
--no-ff: می توانید تعهد ادغام را برای خنثی کردن همه تغییرات برگردانید
--squash: شما فقط تعهد اسکواش را برمی گردانید (همان اثر ، اما ابرداده های مختلف)
ردیابی سرزنش:
--no-ff: git سرزنش نویسندگان اصلی را نشان می دهد
--squash: git سرزنش نویسنده تعهد خرد شده را نشان می دهد
پاکسازی شاخه:
پس از --no-ff، تاریخچه شعبه ویژگی به صورت اصلی حفظ می شود
پس از --squash، ممکن است شاخه ویژگی را حذف کنید زیرا تاریخچه آن در اصل نیست

چه زمانی استفاده کنید --squash در مقابل --no-ff

استفاده کردن --squash چه زمانی:

شما می خواهید تاریخ را برای تغییرات کوچک و متمرکز که در آن تعهدات فردی زمینه معناداری ارائه نمی دهد ، ساده کنید. ایده آل برای:

  • شاخه های ویژگی کوتاه مدت (به عنوان مثال ، اشکالات ، پیشرفت های جزئی)
  • تمیز کردن “کار در حال پیشرفت” قبل از ادغام
  • مشارکت همکاران خارجی که در آن می خواهید یک تعهد تمیز داشته باشید
  • وقتی سیاست تیم تاریخ خطی را ترجیح می دهد

استفاده کردن --no-ff چه زمانی:

شما می خواهید توپولوژی شاخه را برای ویژگی های مهم که در آن تاریخ متعهد است ، حفظ کنید. ایده آل برای:

  • شاخه های ویژگی طولانی مدت
  • تحولات عمده ای که چندین تعهد را انجام داد
  • هنگامی که شما نیاز به پیگیری دقیقاً کدام یک از ویژگی ها دارید
  • هنگام بازگشت کل ویژگی ها ممکن است لازم باشد

مشکلات مشترک

  • پیام های متعهد گمشده: Squashing پیام های متعهد فردی را دور می کند. راه حل:
git merge --squash feature
git commit -m "Feature X: $(git log feature --oneline | head -1)"
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

  • درگیری ها متفاوت به نظر می رسند: حل و فصل درگیری ها در ادغام کدو ممکن است متفاوت از ادغام منظم باشد.

  • به راحتی قابل بازگشت نیست: بازگشت به ادغام اسکواش ، همه تغییرات را به یکباره باز می گرداند ، نه تعهدات فردی.


نتیجه گیری: تاریخ تمیز با ادغام git -squash

git merge --squash ابزار شما برای حفظ تاریخچه تمیز و قابل خواندن است. با ترکیب چندین تعهد در یک تغییر منسجم ، این باعث می شود که تاریخ پروژه شما برای اعضای تیم و نگهدارنده های آینده قابل دسترسی تر باشد.


بعد بعدی: git branch -a با git remote show origin – بازرسی از شاخه های از راه دور


نکات روزانه پیشرفته در صندوق ورودی شما – شروع کار؟ به نظرسنجی من در اینجا پاسخ دهید
برای نکات و ترفندهای مفیدتر و خلاقانه تر ، بیایید به Medium متصل شویم

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا