چالش رایج گیت هابی ( squash چه کوفتیه! ) – سطح متوسط تا پیشرفته
سلام بچه ها
داشتم پروژه bio-link رو واسه اینستاگرامم، توسعه میدادم که دیدم فونت هاش درست لود نمیشه، و مجبور شدم چندین بار تست کنم و هربار کامیتشون کنم و push کنم به گیت هاب تا ببینم githubpage فونت هارو درست لود میکنه یا نه! بنابراین 5 شیش دفعه کامیت تستی و بیخود داشتم! خب حالا که مشکل رو برطرف کرده بودم، طبیعتا خیلی ضایع هستش که کلی کامیت بیخود باشه:
برای همین تصمیم گرفتم که از شرشون راحت شم، برای اینکار 2 تا راه وجود داره:
مرحله اول – تجمیع/حذف کامیت های تستی
راه اول
استفاده از rebase برای squash کردن کامیت ها ( “به عملیاتی با هدف ادغام چند commit باهمدیگه در یک کامیت میگن Squashing” )
git rebase -i HEAD~5
بعد از زدن دستور بالا، ویرایشگر متنتون باز میشه ک کافیه 4تا “pick” آخر رو به “squash” تغییر بدیم:
حالا ذخیره میکنیم و میبنیدیم، بعدش یه بار دیگه ادیتور باز میشه تا متن کامیت ها رو اصلا کنیم، ک ما همه رو پاک میکنیم و یه خط کامیت جدید رو مینویسیم ذخیره میکنیم و تمام!(آخرین مرحله رو ببین برای پوش کردن به گیت که مهمترینه!):
راه دوم
استفاده از soft reset برای انتقال index گیت به کامیت قبلی(اینو بیشتر دوس دارم- ساده تره)
میایم خیلی ساده و راحت با دستور زیر هرچی commit کرده بودیم رو از حالت کامیت به حالت عادی تغییر میدیم(یعنی انگاری که تو پوشه هستن وما هیچ وقت اسیج و کامیتشون نکرده بودیم:
git reset --soft HEAD~5
خب حالا خیلی ساده اول فایل هارو ادد میکنیم و بعدش کامیت میکنیم و تمام!
git add .
git commit -m "fix: fonts not found error
* remove unneeded fonts"
پ.ن. اگه کامیت چند خطی رو نمیدونی این مینی مقاله رو ببین: کامیت چند خطی در ترمینال
مرحله آخر – پوش کردن به گیت هاب
خب تو حالت عادی هرچی تلاش کنین نمیتونین به گیت هاب پوش کنین، بنابراین باید مجبورش کنیم که اینکارو بکنه یعنی از سوییچ –force استفاده کنیم، پس باید خیلی مراقب باشین و حواستون باشه چون دقیقا هر حالت یا وضعیتی که الان گیت پروژه داره رو قرار میده روی گیت هاب:
git push --force
کاربرد اصلی squash:
خب کاربرد رایجش بیشتر برای وقتی هست که شما توی تیم مثلا میخوای فیچر x رو توسعه بدی، اول میای چکار میکنی؟ یک branch جدید ایجاد میکنی از روی master، بعد میای مثلا توش 10تا کامیت میزنی که دو سه تاش هم رفع باگ تو همون فیچره مثلا، خب حالا وقتی که بخوای این فیچر رو که تمومش کردی رو merge کنی با master، میای چکار میکنی کل این branch جدیدتو squash میکنی درقالب یک commit با یک commit message مناسب، اینطوری مزیتش اینه که بعدا که میخوای توی git log بررسی کنی، گیت لاگت شلوغ و سنگین نمیشه و خیلی راحت per feature میتونی بررسی کنی
درباره سیدمهدی حسن پور
ما آدم ها فراموش کردیم که زندگی کنیم، توی باتلاق ها و سراب های مختلفی که آدم های دیگه، جوامع بشری و حتی گاها خودمون... خواه ناخواه برای خودمون ایجاد کردیم گرفتار شدیم. با تجربه کردن و خوندن و شنیدن تجربه های دیگران هست که میتونیم راه خودمونو پیدا کنیم... بعضیا به این تجربه ها میگن علم، بعضی ها خواست خدا...📚 بیایم از تجربه های مفید دیگران استفاده کنیم تا بتونیم تجربه زندگی خودمون و دیگران رو بهبود بدیم.❤ راستی خیلی به برنامه نویسی، امنیت، بازار سرمایه علاقه دارم🔥
نوشته های بیشتر از سیدمهدی حسن پورمطالب زیر را حتما مطالعه کنید
آنباکسینگ و بررسی پایه رومیزی مانیتور و لپ تاپ ارگو Ergo WLA005 Unboxing and Review
کامیت مسیج چند خطی درترمینال – مینی مقاله
نزار پیدات کنن! ( امنیت – WIFI – ویندوز 10) – مینی مقاله
0 تا 100 ساخت یک میز کامپیوتر شخصی(هزینه ها، ابزار و…)
در بازار رمز ارز، چطوری سرمون کلاه میزارن؟
3 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
مرسی ، دمت گرم.
چطوری تجربه های واقعی کار با گیتهاب رو تیم های واقعی میتونم ببینم؟
سلام شهاب جان
سوال خوبی پرسیدی، یکی از بهترین جاهایی که برای اینکار میشه بهش سر زد، درواقع پر از تیم های واقعی و حرفه ای از شرکت های کوچیک و بزرگ هست، github هست، هزاران پروژه متن باز با کلی ادم که روشون کار میکنن و کامیت میکنن هست که میشه بری و مطالعه کنی و مشارکت کنی، درواقع بهترین جا میتونه باشه📚
قشنگ توضیح دادی ممنون