ذخیره موقت تغییرات
پیشنمایش دستور
استفاده
git stash [گزینهها] [<پیام>]
Git Stash چیست؟
Git stash اجازه میدهد تغییرات موجود در working directory را بدون commit موقتاً ذخیره کنید. این برای زمانی که میخواهید شاخه را تغییر دهید یا pull کنید بدون commit کار نیمهتمام مفید است.
موارد کاربرد رایج
- ذخیره تغییرات نیمهتمام قبل از تغییر شاخه.
- پول (Pull) کردن تغییرات جدید از مخزن بدون از دست دادن تغییرات محلی.
- ذخیره موقت فایلهای untracked یا ignored برای پاکسازی working directory.
- ذخیره تغییرات برای مراجعه به آنها در آینده بدون commit کردن.
مثالها
# Save changes with default message
git stash
# Save with custom message
git stash save 'WIP: new feature'
# List stashes
git stash list
# Apply last stash
git stash apply
# Apply a specific stash
git stash apply stash@{2}
# Pop (apply + remove) last stash
git stash pop
# Drop a specific stash
git stash drop stash@{1}
# Clear all stashes
git stash clear
# Stash only untracked files
git stash -u
# Stash including ignored files
git stash -a
دقیقاً چه میکند؟
Git stash تغییرات محلی شما را بهطور موقت ذخیره میکند و working directory شما را به وضعیت آخرین commit باز میگرداند. این ابزار برای زمانی مفید است که میخواهید شاخه را تغییر دهید یا pull کنید بدون از دست دادن تغییرات.
مقایسه
| ویژگی | Commit | Git Stash | Merge |
|---|---|---|---|
| هدف | تغییرات را دائماً در شاخه ذخیره میکند. | تغییرات را موقتاً ذخیره کرده و شما را قادر میسازد تا آنها را بعداً اعمال یا حذف کنید. | شاخهها را ترکیب میکند اما تغییرات را ذخیره یا پنهان نمیکند مانند stash. |
| دامنه | بر روی کل تاریخچه کامیت تأثیر میگذارد. | فقط بر روی working directory تأثیر دارد و تاریخچه کامیت را تغییر نمیدهد. | بر روی هر دو شاخه تأثیر میگذارد و تغییرات را ترکیب میکند. |
| زمان استفاده | زمانی که آمادهاید تغییرات خود را دائماً ذخیره کنید. | زمانی که به ذخیره موقت تغییرات نیاز دارید تا کارهای دیگری انجام دهید. | زمانی که میخواهید تغییرات دو شاخه را در یک شاخه ترکیب کنید. |
| نگهداری دادهها | دائمی است مگر اینکه reset یا revert شود. | موقت است مگر اینکه اعمال یا pop شود. | تغییرات دائمی هستند و در هر دو شاخه باقی میمانند. |
به زبان ساده
Git stash مانند یک قفسه موقت برای تغییرات شما است. شما تغییراتتان را در قفسه میگذارید (stash)، سپس به شاخه دیگری میروید، و زمانی که آمادهاید، به قفسه برمیگردید و ادامه میدهید.
اشتباهات رایج
- فراموش کردن اعمال یا pop کردن stash ها که باعث از دست رفتن کارها میشود.
- استفاده از stash برای فایلهای untracked بدون تنظیم گزینههای صحیح.
- ذخیره فایلهای بزرگ یا غیرضروری بدون پاکسازی آنها بعداً.
بهترین شیوهها
- از پیامهای توصیفی هنگام ذخیره تغییرات با stash استفاده کنید تا دلیل ذخیرهسازی مشخص باشد.
- بهطور منظم stashهای غیرضروری را پاک کنید تا لیست stash شما تمیز بماند.
- فقط زمانی که مطمئن هستید فایلهای untracked اهمیت دارند، آنها را stash کنید.
- برای کنترل دقیقتر روی تغییرات، از گزینه `--patch` استفاده کنید تا بتوانید بهطور تعاملی تغییرات را ذخیره کنید.
- قبل از pop کردن یک stash، اطمینان حاصل کنید که working directory شما تمیز است و تغییرات متناقضی وجود ندارد.
محدودیتها
- تغییرات stash موقت هستند و ممکن است از بین بروند اگر apply یا pop نشوند.
- Git stash فایلهای untracked یا ignored را شامل نمیشود مگر اینکه با گزینههای مناسب مشخص شوند.
- اعمال stash ممکن است باعث بروز conflict شود که نیاز به رفع دستی دارد.
نحوه استفاده
Git stash ابزار سادهای برای ذخیره موقت تغییرات است. فقط کافی است از دستور `git stash` برای ذخیره تغییرات استفاده کنید. با دستور `git stash list` میتوانید لیست همه stashها را مشاهده کنید. برای اعمال یا حذف یک stash از `git stash apply` یا `git stash pop` استفاده کنید.
نمای کلی
Git stash ابزاری قدرتمند برای توسعهدهندگانی است که نیاز دارند تغییرات خود را بهطور موقت ذخیره کرده و از commit کردن آنها جلوگیری کنند. چه بخواهید شاخهها را تغییر دهید یا تغییرات جدیدی را از مخزن pull کنید، `git stash` به شما کمک میکند تا working directory خود را تمیز نگهدارید و کارهای نیمهتمام خود را برای بعد ذخیره کنید.
گزینهها
- -u, --include-untracked : شامل فایلهای untracked
- -a, --all : شامل همه فایلها حتی ignored
- save <message> : ذخیره با پیام دلخواه
- apply [stash] : اعمال یک stash
- pop [stash] : اعمال و حذف یک stash
- list : لیست stashها
- drop <stash> : حذف یک stash مشخص
- clear : حذف همه stashها
- -k, --keep-index : حفظ staged changes
- --patch : ذخیره تعاملی per hunk