مقدمه
بارها برای هر توسعهدهندهای پیش میآید: شما در حال کار عمیق روی یک قابلیت جدید هستید، چندین
فایل را تغییر دادهاید، اما کارتان هنوز تمام نشده و آماده کامیت کردن نیست. ناگهان یک درخواست
فوری پیش میآید: باید فوراً به برنچ main بروید تا یک باگ حیاتی را بررسی کنید. چه کار باید
بکنید؟
اگر سعی کنید با یک پوشه کاری «کثیف» (Dirty Working Directory) یعنی با تغییرات کامیتنشده،
برنچ را عوض کنید، گیت به شما خطا میدهد تا از دست رفتن کارتان جلوگیری کند. شما نمیخواهید یک
کامیت نیمهکاره و بیمعنی با پیام «WIP» (Work In Progress) بسازید. اینجاست که یکی از مفیدترین
ابزارهای گیت به کمک شما میآید: git stash.
Stash چیست و چه مشکلی را حل میکند؟
git stash یک قفسه یا انبار موقت برای تغییرات کامیتنشده شماست. این دستور تمام تغییراتی را
که در Staging Area و Working Directory خود دارید، برداشته، آنها را در یک فضای امن
و موقت ذخیره میکند و سپس پوشه کاری شما را به حالت آخرین کامیت (HEAD) بازمیگرداند.
در نتیجه، شما یک پوشه کاری تمیز در اختیار دارید و میتوانید با خیال راحت برنچ خود را عوض کنید،
تغییرات دیگران را pull کنید یا هر کار دیگری انجام دهید. پس از اتمام کار فوری، میتوانید
به برنچ خود بازگشته و تغییرات ذخیرهشده را از انبار موقت خارج کرده و به کار خود ادامه دهید.
دستورات اصلی Stash
کار با stash بسیار ساده و سرراست است.
ذخیره کردن تغییرات: git stash
وقتی میخواهید کار نیمهتمام خود را کنار بگذارید، کافیست دستور زیر را اجرا کنید:
git stash
گیت تمام تغییرات رهگیریشده (tracked) شما را ذخیره کرده و پوشه کاری را تمیز میکند.
میتوانید برای به خاطر سپردن اینکه این stash برای چه کاری بوده، یک پیام نیز به آن اضافه
کنید:
git stash save "Working on new user profile design"
مشاهده لیست Stashها: git stash list
گیت تغییرات شما را در یک پشته (stack) ذخیره میکند. یعنی میتوانید چندین stash
داشته باشید. برای مشاهده لیست آنها، از دستور زیر استفاده کنید:
git stash list
خروجی شبیه به این خواهد بود:
stash@{0}: On feature/profile: Working on new user profile design
stash@{1}: On feature/profile: Earlier changes
آخرین stash همیشه در بالای پشته (stash@{0}) قرار دارد.
بازیابی تغییرات: git stash pop و git stash apply
برای بازگرداندن تغییرات به پوشه کاری، دو راه دارید:
- git stash pop: این دستور آخرین stash (stash@{0}) را برداشته، تغییرات آن
را روی پوشه کاری شما اعمال میکند و سپس آن را از لیست stashها حذف
میکند. این رایجترین دستور برای بازیابی است.
- git stash apply: این دستور نیز آخرین stash را اعمال میکند، اما یک کپی از آن
را در لیست stashها نگه میدارد. این زمانی مفید است که بخواهید یک
مجموعه از تغییرات را روی چندین برنچ اعمال کنید.
git stash pop
git stash apply
اگر بخواهید یک stash خاص (نه آخرین مورد) را اعمال کنید، باید شناسه آن را مشخص نمایید:
git stash pop stash@{1}
.
حذف یک Stash
اگر دیگر به یک stash خاص نیاز ندارید، میتوانید با دستور git stash drop و ذکر شناسه
آن، آن را برای همیشه حذف کنید.