روز 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 متصل شویم