همه چیز در مورد Git stash - ذخیره کردن موقتی تغییرات در Git



visibility  
mode_comment   ۰

همه چیز در مورد Git stash - ذخیره کردن موقتی تغییرات در Git

در این مطلب میخوایم هر چیزی که در مورد Git stash نیاز دارید رو بهتون آموزش بدم و ببینیم که این دستور کاربردی در Git به چه دردی میخوره و چطور میتونیم از اون استفاده کنیم.

تصویر کنید که شما بر روی قسمتی از پروژه خودتون کار میکنید و در حال به وجود آوردن یک ویژگی جدید در پروژه خودتون هستید و تغییرات زیادی رو به وجود آوردید و همه تغییرات در Local هستند و هنوز Commit نشده‌اند. در همین حال متوجه میشید که سایتتون یک باگ اورژانسی داره و باید همین الان اون رو برطرف کنید.

حالا اگر بخواید این همه تغییر رو یکی یکی بررسی کنید و هر کدام رو جداگانه در Commit مربوط به خودش قرار بدین و بعد از اون branch رو تغییر بدین و بخواید merge کنید و ... زمان زیادی از شما میگیره و این همه زمان نداریم. مشکل دیگه‌ای که علاوه بر زمان وجود داره اینه که کار شما نیمه تمام هست و شما وسط کار هستید و نمیخواید یک ویژگی رو بصورت نصفه نیمه Commit کنید.

اینجا هست که Git stash به کارتون میاد و با استفاده از اون میتونین این مشکل رو برطرف کنید.

Stashing یا ذخیره کردن تغییرات

فرض کنیم که شما تعدادی فایل دارید که بصورت Local و در Working directory تغییرشون دادید. میتونیم با استفاده از git status وضعیت فعلی پروژه رو مشاهده کنیم:

همونطور که در بالا میبینید دو فایل index.html و styles.css تغییر داده شدند. index.html بصورت stage و styles.css بصورت unstage هست. الان یهو متوجه میشید که یک باگ وجود داره یا یکی از هم تیمی‌ها ازتون درخواست میکنه که کاری رو که تناسبی با کار فعلی نداره انجام بدین.

پس شما باید اول تغییراتی رو که دادید رو بدون اینکه از Commit استفاده کنید، ذخیره‌سازی کنید. اینجا هست که باید از git stash استفاده کنیم.

خب حالا به سادگی دستور git stash رو اجرا کنید. با اینکار خروجی زیر رو مشاهده خواهید کرد:

با اینکار working directory شما تروتمیز میشه و همه تغییرات local که Commit نشده بودند، ذخیره‌سازی میشن. در این لحظه شما میتونین هر کاری دیگه‌ای که نیاز دارید رو انجام بدین و این تغییرات هیچ تاثیری بر تغییرات ذخیره شده ندارند و میتونین چیزایی که ذخیره کردید رو هر وقت که خواستید، استفاده کنید.

بصورت پیش فرض و زمانی که اسمی رو برای git stash استفاده نمیکنید، یک نام پیش فرض برای stash در نظر گرفته میشه که بعدا بتونین اون رو تشخیص بدین و اون رو Restore کنید. این نام پیش فرض از WIP یا Work in progress (کار در حال انجام) و پیام آخرین Commit و branch ای که در اون git stash رو اجرا کردیم، ساخته میشه.

استفاده مجدد از تغییرات ذخیره شده با Git stash

همونطور که قبلا هم بیان شد، git stash یک مکانیزم ذخیره موقت تغییرات هست. زمانی که باگ مورد نظر یا کار اورژانسی رو به اتمام رسوندید و آماده بودید که ویژگی که قبلا بر روی اون کار میکردید رو ادامه بدین، میتونین تغییرات ذخیره شده رو Restore کنید و ازشون استفاده کنید.

برای اینکار از دستور git stash pop استفاده میکنیم. git stash همانند یک آرایه میمونه که میتونین المنتهایی رو به اون اضافه کنید و هر وقت که خواستید با استفاده از pop آخرین المنت رو از آرایه جدا کنید و ازش استفاده کنید.

متخصص وردپرس
قالب ها و پلاگین های حرفه ای وردپرس رو خودت بنویس! بازار طراحی قالب و پلاگین نویسی وردپرس به شدت داغه و اگر بلد باشید با برنامه نویسی اختصاصی، قالب ها و پلاگین های دلخواه بنویسید تو مارکت های مطرح دنیا و یا از طریق فریلنسری می تونید به درآمد بالا برید. دوره متخصص وردپرس سون لرن رو حتما ببینید: متخصص وردپرس arrow_back

با استفاده از git stash pop آخرین تغییراتی که در لیست stash ها وجود داره پاک میشه و به working directory برگشت داده میشه و میتونین تغییراتی که قبلا ذخیره کرده بودید رو مشاهده کنید و کارتون رو ادامه بدین. اگر بخواید تغییرات رو برگشت بدین اما از لیست git stash حذف نشه (شاید در آینده بخواید از اون استفاده کنید و یا ...) میتونین از دستور git stash apply استفاده کنید.

تکنیک و ترفندهای اضافه در مورد git stash

کارهای بدرد بخور دیگه‌ای هم هستند که میتونین با استفاده از اونا میتونین حرفه‌ای‌تر کار کنید.

ذخیره کردن با نام مشخص

شما با استفاده از دستور git stash save میتونین تغییرات مورد نظر رو با پیام مورد نظرتون ذخیره کنید و کاری کنید که پیام پیش‌فرض قرار داده نشه. با اینکار اگر چند مورد در git stash ذخیره کرده باشید، به راحتی میتونین اون تغییراتی که مورد نظرتون هست رو پیدا کنید و کارتون رو ادامه بدین. برای اینکار بصورت زیر عمل میکنیم:

بجای <message> باید پیام مورد نظرتون رو قرار بدین.

ذخیره کردن فایلهای Unstage

وقتی که دستور git stash رو اجرا میکنید، فقط اون تغییراتی که فایلهاشون بصورت track شده هستند و git اطلاعاتی در مورد اونا داره ذخیره‌سازی میشن. اگر بخواید که تغییرات مربوط به فایلهای Untrack هم ذخیره بشه، میتونین بصورت زیر عمل کنید:

میتونین بصورت خلاصه از git stash -u هم استفاده کنید.

نمایش لیست تغییرات ذخیره شده

همونطور که در بالا مشاهده کردید زمانی که از git stash یا git stash save استفاده میکنیم، git تغییرات را با یک نام خاص در جایی از پروژه بصورت موقت ذخیره میکنه. شما میتونین در هر زمان با استفاده از دستور git stash list همه تغییراتی که ذخیره کردید رو مشاهده کنید:

همونطور که میبینید در بالا این دستور رو اجرا کردیم و در حال حاضر 2 مورد در لیست وجود داره. همونطور که میبینید هر Stash یک id یکه داره که مثلا برای مورد دوم stash@{1} هست. برای اینکه این مورد در stash رو restore کنید و یا حذف کنید و ... باید این آدرس رو مشخص کنید.

مثلا اگر بخوایم تغییرات مربوط به مورد دوم رو Restore کنیم، بصورت زیر عمل میکنیم:

ذخیره‌سازی جزئی

شما میتونین فقط تغییرات مربوط به یک فایل یا چند فایل رو ذخیره سازی کنید و لازم نیست که همه رو همزمان ذخیره کنید. برای اینکار از دستور git stash -p یا git stash --patch استفاده میشه.

حذف کردن stash

از این دستور با احتیاط استفاده کنید چون اگر اشتباهی موردی رو حذف کنید یا نمیتونین اون رو برگشت بدید یا برگشت دادن اون سخت خواهد بود. تنها راهی که میتونین اون رو بازیابی کنید اینه که ترمینالی که با استفاده از اون stash رو حذف کردید رو نبسته باشید.

برای اینکه یک مورد خاص رو از لیست stash ها حذف کنید میتونین بصورت زیر استفاده کنید:

با اینکار اون stash که id اون stash@{1} هست حذف میشه.

اگر بخواید همه stash ها رو حذف کنید میتونین از دستور git stash clear استفاده کنید.

به همین راحتی.

برای مطالعه بیشتر میتونین این مقاله رو مطالعه کنید.

نتیجه گیری

در این مطلب نحوه ذخیره‌سازی تغییرات بصورت موقت با استفاده از دستور git stash آموزش داده شده و تقریبا همه دستورات مهم و کاربردی اون توضیح داده شد. شما با یادگیری git stash میتونین در git حرفه‌ای تر از گذشته کار کنید.

comment دیدگاه کاربران

نیاز به لاگین

برای ارسال دیدگاه و یا پرسیدن سوال خود در این قسمت، باید در سایت لاگین شوید.