تصور کنید غرق در کدنویسی یک ویژگی جدید هستید که ناگهان پیامی اضطراری دریافت میکنید: «یک باگ فوری در سایت پیدا شده و باید همین الان آن را رفع کنید!». مشکل بزرگ اینجاست که کدهای فعلی شما هنوز ناقص و درهمریخته هستند؛ نه میتوانید آنها را به این شکل کامیت کنید و نه گیت اجازه میدهد بدون تعیین تکلیف فایلها، شاخه خود را برای رفع باگ تغییر دهید.
در این درس، با ابزار هوشمند git stash آشنا میشوید که دقیقاً برای همین لحظات بحرانی طراحی شده است. یاد میگیرید که چگونه تمام تغییرات نیمهتمام خود را در یک لحظه در یک «فضای امن و موقت» ذخیره کنید تا محیط کاریتان کاملاً پاکیزه شود.
با تسلط بر این تکنیک، میتوانید با سرعت برق به کارهای اضطراری رسیدگی کنید و سپس با یک دستور ساده، دوباره به همان نقطهای که بودید برگردید. مطالعه این بخش به شما کمک میکند تا در محیطهای شلوغ کاری، همیشه منعطف و حرفهای باقی بمانید.
فلسفه و کاربرد Git Stash
ابزار Git Stash مانند یک «کمد جادویی» عمل میکند که تغییرات نیمهکاره شما را به طور موقت از محیط کاری خارج و در مکانی امن ذخیره میکند. در دنیای واقعی، گیت اجازه نمیدهد در حالی که فایلهای ویرایششده و کامیتنشده دارید، به سادگی بین شاخهها جابهجا شوید؛ زیرا این کار ممکن است باعث از دست رفتن زحمات شما یا تداخل در کدهای شاخه مقصد شود.
راهحل فرار از کامیتهای کثیف
برخی برنامهنویسان برای حل مشکل جابهجایی بین شاخهها، کارهای ناقص خود را با پیامهای مبهمی مثل "wip" (کار در حال اجرا) کامیت میکنند. این کار باعث شلوغی و کاهش کیفیت تاریخچه پروژه میشود. فلسفه وجودی stash این است که شما را از ثبت این کامیتهای بیارزش بینیاز کند؛ به این ترتیب تاریخچه پروژه شما همیشه تمیز و حاوی نسخههای کامل و تستشده باقی میماند.
سناریوی اضطراری در شرکت
تصور کنید در حال توسعه یک ویژگی بزرگ هستید و ناگهان یک باگ حیاتی در سایت گزارش میشود که باید فوراً رفع شود.
با استفاده از stash میتوانید تمام کدهای نیمهتمام خود را در یک لحظه کنار بگذارید، محیط کاری را به حالت «پاکیزه» برگردانید و به شاخه مربوط به رفع خطا بروید. پس از انجام کار اضطراری، به راحتی به شاخه قبلی برمیگردید و کدهایتان را از کمد جادویی خارج میکنید تا دقیقاً از همان نقطهای که متوقف شده بودید، ادامه دهید.
ذخیره تغییرات با دستور git stash
دستور git stash تمام فایلهای ویرایششده و تغییرات موجود در محیط استیج (Staged) را به صورت یکجا برمیدارد و در یک حافظه موقت و امن ذخیره میکند. با اجرای این دستور، گیت وضعیت شاخه فعلی را به آخرین کامیت برمیگرداند؛ این یعنی محیط کاری شما کاملاً پاکیزه (Clean) شده و دیگر هیچ منعی برای جابهجایی سریع بین شاخهها نخواهید داشت.
استفاده از این ابزار به شما کمک میکند تا بدون ثبت کامیتهای نیمهتمام و مبهم، کدهای خود را به اصطلاح «فریز» کنید تا در فرصتی مناسب دوباره به سراغ آنها بروید. برای اجرای این عملیات، کافی است دستور زیر را در ترمینال بنویسید:
git stash
پس از وارد کردن این دستور، گیت پیامی مبنی بر ذخیره شدن وضعیت فعلی نمایش میدهد و شما میتوانید با خیالی آسوده به سراغ رفع باگهای اضطراری یا بررسی شاخههای دیگر بروید [۱۵۸، ۱۷۵]. به یاد داشته باشید که این تغییرات از بین نرفتهاند، بلکه در یک لیست پشتهای (Stack) منتظر بازگشت شما هستند.
مشاهده لیست ذخیرهها
وقتی چندین بار از کمد جادویی استفاده میکنید، گیت تمام این تغییرات را به صورت یک پشته (Stack) روی هم نگه میدارد. برای اینکه ببینید در حال حاضر چه مواردی را ذخیره کردهاید، دستور زیر را اجرا کنید:
git stash list
خروجی این دستور لیستی از ذخیرهها را با شناسههایی مانند stash@{0} نمایش میدهد که نشاندهنده آخرین تغییرات فریز شده شماست. هر مورد در این لیست شامل نام شاخه و خلاصهای از آخرین کامیت آن زمان است تا به راحتی یادتان بیاید که در آن لحظه روی چه موضوعی کار میکردید. مدیریت این لیست به شما قدرت میدهد تا میان چندین تسک نیمهتمام جابهجا شوید، بدون اینکه حتی یک خط از کدهایتان را فراموش کنید
بازگرداندن کدها با pop و apply
پس از اینکه کار اضطراری شما تمام شد و به شاخه اصلی خود بازگشتید، نوبت به آن میرسد که کدهای نیمهتمام را از «کمد جادویی» خارج کنید. گیت برای این کار دو روش هوشمندانه در اختیار شما قرار میدهد:
۱. دستور git stash apply
این دستور آخرین تغییرات ذخیره شده را به شاخه فعلی شما بازمیگرداند، اما یک نسخه از آن را همچنان در لیست ذخیرهها (Stash List) باقی میگذارد. این روش زمانی بسیار مفید است که بخواهید یک قطعه کد را روی چندین شاخه مختلف به صورت همزمان امتحان کنید، بدون اینکه نگران پاک شدن آن از حافظه موقت باشید.
۲. دستور git stash pop
این دستور محبوبترین روش میان برنامهنویسان حرفهای است؛ زیرا تغییرات را بازمیگرداند و بلافاصله آن را از لیست ذخیرهها حذف میکند [۵، ۲۵]. با استفاده از pop شما در واقع کمد خود را پس از برداشتن لباس، مرتب و خالی میکنید تا از انباشته شدن کدهای قدیمی و گیجکننده جلوگیری کنید.
نکته کاربردی: اگر چندین مورد ذخیره شده دارید و نمیخواهید آخرین مورد را بازگردانید، میتوانید از شناسه آن در دستور استفاده کنید. برای مثال، جهت بازگرداندن دومین مورد ذخیره شده از این دستور استفاده کنید:
git stash apply stash@{1}
پاکسازی کمد موقت
انباشته شدن تغییرات قدیمی در لیست استش (Stash) میتواند باعث سردرگمی و انتخاب اشتباه کدهای منسوخ شود. برای حفظ نظم و جلوگیری از شلوغی این محیط موقت، گیت ابزارهایی برای حذف ذخیرههای غیرضروری در اختیار شما قرار داده است.
حذف یک ذخیره خاص
اگر کارتان با یک ذخیره مشخص تمام شده و دیگر به آن نیاز ندارید، با استفاده از دستور زیر میتوانید آن را از لیست خارج کنید:
git stash drop <شناسه_استش>
به عنوان مثال، برای حذف آخرین استش ثبت شده، عبارت git stash drop stash@{0} را بنویسید. این کار به شما کمک میکند تا فقط کدهای زنده و کاربردی را در لیست خود نگه دارید
تخلیه کامل کمد جادویی
در مواردی که لیست ذخیرههای شما بسیار طولانی و گیجکننده شده است، میتوانید با یک دستور تمام آنها را به صورت یکجا پاک کنید:
git stash clear
دقت کنید که این عملیات تمام کدهای ذخیره شده در حافظه موقت را برای همیشه حذف میکند و امکان بازگرداندن آنها وجود ندارد. بنابراین فقط زمانی از این دستور استفاده کنید که مطمئن هستید دیگر به هیچکدام از آن کارهای نیمهتمام نیاز ندارید.