Shadi Shirinbeik
Shadi Shirinbeik
خواندن ۷ دقیقه·۵ سال پیش

یکی دیگه از دستورات مفید گیت --> Git stash

سلام دوستان.

با نوشتن این مقاله قصد دارم شما رو با یه قسمت کوچیک دیگه از اقیانوس گیت آشنا کنم. مفهومی به نام git stash. پیش‌نیاز این مبحث آشنایی با گیت و مفاهیمی مثل add, commit و remote هست.

در ابتدا یه توضیحی راجع به این میدم که اصلا چرا به git stash نیاز داریم؟ و بعد از اون سعی می‌کنم تمامی دستورات مهم و کاربردی این مفهوم رو توضیح بدم.


1. چرا به git stash نیاز داریم؟

یه مثال رایج از کاربرد git stash اینکه فرض کنید در حال توسعه یه قسمتی از پروژه هستید و به طور اورژانسی یه change داریم. یا نیازه که یه باگ خیلی فوری رو برطرف کنیم. توی این شرایط فرصت این رو که با خیال راحت فایل‌های مختلفمون رو stage و commit کنیم نداریم. یه مثال دیگه که برای خود من پیش اومده اینکه تایم کاریم در شرکت تموم شده اما هنوز یه قسمتی از کارم رو به صورت کامل توسعه ندادم و نمی‌خوام که اون رو نصفه و نیمه کامیت کنم. در این شرایط می‌تونیم از git stash استفاده کنیم. stash در لغت به معنی ذخیره کردن هست. در عمل هم دقیقا گیت میاد و هر آن چیزی که در local داریم و کامیت نشده رو ذخیره میکنه. حالا می‌تونیم با خیال راحت بریم سراغ تغییراتی که لازمه انجام بدیم. و بعد از اتمام کارمون دوباره مواردی که با استفاده از git stash ذخیره کرده بودیم رو Restore کنیم. بدون اینکه تاثیری روی هم داشته باشن.


2. Git stash

قبل ازینکه کار با stash رو شروع کنیم یه git status می‌گیرم تا ببینیم وضعیت چجوریه:

git status
git status


خب همونطور که می‌بینیم در فایل index.html یه سری تغییراتی داریم. حالا می‌خوام این تغییرات رو ذخیره کنم و برم سراغ یه کار دیگه. دستور زیر رو وارد می‌کنم و خروجی میشه شکل زیر:

git stash
git stash
git stash


حالا اگه status بگیریم میبینیم که working directory ما خالی شده و تونستیم تغییرات رو بدون اینکه کامیت کنیم ذخیره کنیم. یه اسمی هم به طور پیش‌فرض بر روی stashمون گذاشته شده.


3. Git stash save

با این دستور می‌تونیم یه پیغام دلخواه برای stashمون انتخاب کنیم. وقتی که تعداد stashها زیاد باشن این مورد می‌تونه برای شناسایی سریع و راحت اون تغییری که مد نظرمون هست به کارمون بیاد.

git stash save "this is a message for my stash"


4. Git stash list

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

git stash list
git stash list

خب تا اینجای کار داره بهمون میگه که ما دو تا stash داریم. هر کدوم ازین stashها یه ID و یه message دارن. (message اول پیغامی هست که خودم با دستور git stash save مشخص کردم و message دوم پیغامی هست که به صورت پیش فرض انتخاب شده.)


4. Git stash save -u

حتما متوجه شدید که git stash فقط فایل‌هایی رو ذخیره میکنه که track شده هستن. برای اینکه بتونیم untracked file ها رو هم ذخیره کنیم ازین دستور استفاده می‌کنیم.

git stash save -u

یا

git stash save --include-untracked

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

git stash -a

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

git stash | git stash -u | git stash -a
git stash | git stash -u | git stash -a


5. Git stash apply

اگه بخوایم تغییراتی که ذخیره کردیم رو بازیابی کنیم می‌تونیم ازین دستور استفاده کنیم. git stash apply باعث میشه آخرین stash ما به working directory برگشت داده بشه. حالا می‌تونیم ادامه کارمون رو انجام بدیم.

با استفاده از ID هر stash هم می‌تونیم یه stash به خصوص رو بازیابی کنیم. به قطعه کد زیر دقت کنین:

git stash apply stash@{1}


6. Git stash pop

این دستور هم مشابه دستور قبل عمل میکنه با این تفاوت که وقتی آخرین stash رو برمیگردونه، اون رو از لیست stashها هم پاک میکنه.

باز هم مثل دستور قبل، اگه بخوایم یه stash به خصوص رو pop کنیم می‌تونیم از ID اون stash استفاده کنیم.

git stash pop stash@{1}


7. Git stash drop

حالا اگه بخوایم یه stash رو صرفا حذف کنیم (بدون نیاز به restore کردن اون)، می‌تونیم از این دستور استفاده کنیم. و اگه نیاز باشه یه stash مشخص حذف بشه هم با استفاده از ID اون.......

git stash drop stash@{1}

بهتره که در استفاده ازین دستور دقت کنیم چون مستقیما باعث حذف stashمون میشه و تغییرات رو Restore نمیکنه.


8. Git stash clear

این دستور هم تمامی stashهامون رو به صورت یکجا پاک میکنه. (بدون اینکه اونها رو restore کنه)


9. Git stash show

اگه بخوایم تغییرات stash رو مشاهده کنیم می‌تونیم ازین دستور استفاده کنیم. این دستور تغییرات مربوط به آخرین stash رو بهمون میده.

git stash show

به خروجی زیر دقت کنید:

git stash show
git stash show


حالا اگه در ادامه همین دستور، ID یه stash مشخص رو قرار بدیم تغییرات مربوط به همون stash رو بهمون نشون میده.

git stash show stash@{1}

و با git stash -p هم لیست تغییرات تمامی stashها رو می‌تونیم داشته باشیم.

git stash show -p


خب دیگه تقریبا کار تموم شده. فقط یه دستور دیگه مونده.


10. Git stash branch <name>

به عنوان آخرین دستور، می‌خوام یه دستور جالب و بهتون معرفی کنم. git stash branch میاد با آخرین stash ای که ما داریم یه برنچ میسازه. و بعد ازون stash رو حذف می‌کنه و به طور خودکار switch می‌کنه به برنچ جدیدی که ساخته شده.

git stash branch "test"

با دستور بالا یه برنچ جدید به نام "test" ساخته میشه و تغییراتی که در آخرین stash ذخیره شده به برنچ تست اضافه میشه و اون stash حذف میشه. روال کار رو در تصاویر زیر می‌تونین ببینین.

همونطور که میبینید در حال حاضر (قبل از اعمال دستور git stash branch)، ما دو تا stash داریم و یه برنچ به نام master. و working directory مون هم clear هست.

حالا بعد از اعمال دستور

git stash branch "test"

خروجی رو به صورت زیر مشاهده می‌کنیم:

git stash branch
git stash branch


خب... همچیز واضح و مشخصه. برنچ تست ساخته شده؛ تغییراتی که در آخرین stash بود (اگه یادتون باشه مربوط میشد به فایل index.html) حالا در برنچ تست قرار داره و گیت به‌طور خودکار به تست swtich کرده. و فایل index.html به حالت unstaged تبدیل شده. در آخرین خط هم مشاهده می‌کنید که stash مربوطه drop شده. (از لیست stashها حذف شده)



و تموووم... مفهوم خیلی سخت و پیچیده‌ای نیست. فقط کافیه که دست به کار شین و یه بار خودتون این مراحل رو به صورت عملی انجام بدین.

من درین مقاله سعی کردم دستورات مهم و کاربردی git stash رو به‌طور کامل براتون توضیح بدم. اگه علاقه به مطالعه بیشتر و دقیق‌تر درین زمینه دارید می‌تونید داکیومنت گیت و مطالعه کنید.

https://git-scm.com/docs/git-stash


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


بقیه مقالات من در ویرگول:

https://vrgl.ir/Qkzhq
https://vrgl.ir/5GHd4
https://vrgl.ir/Xw8al


References:

  1. https://git-scm.com/docs/git-stash
  2. https://www.javatpoint.com/git-stash
  3. https://www.atlassian.com/git/tutorials/saving-changes/git-stash
  4. https://medium.com/free-code-camp/useful-tricks-you-might-not-know-about-git-stash-e8a9490f0a1a
gitgit stashبرنامه نویسیگیتگیت استش
Front-End Developer (JavaScript | Vue.js). I love to learn more
شاید از این پست‌ها خوشتان بیاید