Git stash: tugallanmagan ishni kommitsiz qanday chetga qo‘yish
Amaliyot3 daqInnovialabs tahririyati
Qisqacha
git stash kommit qilinmagan o‘zgarishlarni vaqtincha alohida stekka oladi va ishchi nusxani oxirgi kommit holatiga qaytaradi; ularni git stash pop yoki apply bilan qaytarasiz, bir necha kunlik ish uchun esa WIP-branch ishonchliroq.
git stash nima qiladi
git stash kommit qilinmagan o‘zgarishlaringizni (ishchi nusxa va indeksdagi) maxsus stekka saqlaydi va fayllarni oxirgi kommit holatiga qaytaradi. Odatiy vaziyat: vazifaning o‘rtasidasiz, lekin shoshilinch boshqa branchga o‘tib, xatoni tuzatish kerak.
git stash push -m "to‘lov formasi, validatsiya yarmi"
git switch hotfix/login
# ...tuzatdik, kommit qildik...
git switch feature/payment
git stash pop
Oddiy git stash — xabarsiz git stash push bilan bir xil.
Asosiy buyruqlar
| Buyruq | Nima qiladi |
|---|---|
git stash push -m "matn" | O‘zgarishlarni tushunarli nom bilan yashirish |
git stash list | Barcha yozuvlarni ko‘rsatish: stash@{0}, stash@{1}… |
git stash show -p stash@{1} | Muayyan yozuvning diff ini ko‘rish |
git stash pop | Oxirgi yozuvni qo‘llash va stekdan o‘chirish |
git stash apply stash@{1} | Yozuvni qo‘llash, lekin stekda qoldirish |
git stash drop stash@{1} | Bitta yozuvni o‘chirish |
git stash clear | Barcha yozuvlarni birdan o‘chirish |
pop yoki apply? Odatiy holatda pop qulay. apply bir xil o‘zgarishlarni bir nechta branchga qo‘llamoqchi bo‘lsangiz yoki hammasi silliq o‘tishiga ishonchingiz komil bo‘lmasa foydali.
Indekslar siljiydi: eng yangi yozuv har doim stash@{0}. Shuning uchun raqam bilan drop yoki apply qilishdan oldin git stash list ni ko‘ring.
Yangi fayllar va alohida yo‘llar
Standart holatda stash faqat kuzatiladigan fayllarni oladi. Git hali ko‘rmagan yangi fayllar ishchi nusxada qoladi.
git stash push -u(yoki--include-untracked) — kuzatilmaydigan fayllarni ham yashiradi.git stash push -a(--all) — e’tiborsiz qoldirilgan fayllarni ham yashiradi. Ehtiyot bo‘ling: u yerganode_modulesyoki build natijalari ham tushadi.git stash push -- src/api.ts src/utils/— faqat ko‘rsatilgan yo‘llarni yashiradi.git stash push -p— o‘zgarishlarning alohida qismlarini interaktiv tanlash.git stash push --keep-index— indeksga qo‘shilganidan tashqari hammasini yashiradi. Kommit qilmoqchi bo‘lgan narsangiz o‘zi alohida ishlashini tekshirish uchun qulay.
Yozuvlarga nom berish
-m siz yozuv WIP on main: 3f2a1c4 oxirgi kommit ko‘rinishida bo‘ladi. Bir haftadan keyin bunday yozuvlar bir nechta bo‘ladi va qaysi biri nima ekanini tushunish qiyin. Qoida oddiy: har doim xabar yozing — qisqa va aniq: qaysi vazifa va u qay holatda.
Qaytarishdagi konfliktlar
O‘zgarishlar stashda turganda kimdir aynan o‘sha qatorlarni o‘zgartirgan bo‘lsa, git stash pop konflikt bilan tugaydi. Muhim: konfliktda yozuv stekdan o‘chirilmaydi, garchi siz pop qilgan bo‘lsangiz ham.
Harakatlar tartibi:
<<<<<<<markerlari bor fayllarni oching va konfliktni oddiy merge dagidek hal qiling.- Fayllarni hal qilingan deb belgilang:
git add <fayl>(yoki indeksda qoldirmoqchi bo‘lmasangizgit restore --staged <fayl>). - Hammasi joyida ekaniga ishonch hosil qiling va yozuvni qo‘lda o‘chiring:
git stash drop.
Konflikt juda chalkash bo‘lsa, xavfsiz yo‘l bor: git stash branch fix-stash stash@{0}. Git stash qilingan kommitdan yangi branch yaratadi, o‘zgarishlarni u yerga konfliktsiz qo‘llaydi va muvaffaqiyatli bo‘lsa yozuvni o‘chiradi.
Qachon WIP-branch yaxshiroq
Stash — daqiqalar va soatlar uchun vosita. U faqat lokal repozitoriyingizda yashaydi, serverga yuborilmaydi va boshqa yozuvlar orasida oson yo‘qoladi.
Quyidagi hollarda alohida branchga kommit qiling:
- ish bir necha kunga to‘xtatilgan;
- o‘zgarishlarni hamkasbga ko‘rsatish yoki boshqa kompyuterda davom ettirish kerak;
- ish serverda saqlanishini xohlaysiz;
- o‘zgarishlar ko‘p va qadamlar tarixi muhim.
git switch -c wip/payment-form
git add -A
git commit -m "WIP: to‘lov formasi"
git push -u origin wip/payment-form
Keyinroq kommitlarni git rebase -i yoki merge paytida squash orqali birlashtirish mumkin.
Ko‘p uchraydigan xatolar
- Unutilgan yozuvlar.
git stash listni muntazam ko‘rib, keraksizlarini o‘chiring. - Yangi fayllar «yo‘qolib qoldi». Ehtimol, ular yashirilmagan:
-usiz ular joyida qolgan yoki siz ularni tasodifan o‘chirgansiz. - Xato bilan
git stash clear. O‘chirilgan yozuvlarni ba’zangit fsck --unreachableorqali topish mumkin, lekin bunga umid qilmang. - Noto‘g‘ri branchga pop. O‘zgarishlar hozir turgan joyingizga qo‘llanadi. Qaytarishdan oldin
git statusni tekshiring.