Asosiy kontentga o‘tish
Innovialabs

Git stash: tugallanmagan ishni kommitsiz qanday chetga qo‘yish

Amaliyot3 daq

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

BuyruqNima qiladi
git stash push -m "matn"O‘zgarishlarni tushunarli nom bilan yashirish
git stash listBarcha yozuvlarni ko‘rsatish: stash@{0}, stash@{1}…
git stash show -p stash@{1}Muayyan yozuvning diff ini ko‘rish
git stash popOxirgi 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 clearBarcha 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 yerga node_modules yoki 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:

  1. <<<<<<< markerlari bor fayllarni oching va konfliktni oddiy merge dagidek hal qiling.
  2. Fayllarni hal qilingan deb belgilang: git add <fayl> (yoki indeksda qoldirmoqchi bo‘lmasangiz git restore --staged <fayl>).
  3. 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 list ni muntazam ko‘rib, keraksizlarini o‘chiring.
  • Yangi fayllar «yo‘qolib qoldi». Ehtimol, ular yashirilmagan: -u siz ular joyida qolgan yoki siz ularni tasodifan o‘chirgansiz.
  • Xato bilan git stash clear. O‘chirilgan yozuvlarni ba’zan git fsck --unreachable orqali topish mumkin, lekin bunga umid qilmang.
  • Noto‘g‘ri branchga pop. O‘zgarishlar hozir turgan joyingizga qo‘llanadi. Qaytarishdan oldin git status ni tekshiring.

Ko‘p beriladigan savollar

Yo‘q. Stash yozuvlari faqat lokal saqlanadi va push bilan yuborilmaydi. Ishni serverda saqlash kerak bo‘lsa, uni alohida branchga kommit qiling.

Bunda yordam beramiz

O‘zingiz shug‘ullanmasdan natija olishni istasangiz — biz har kuni shu bilan shug‘ullanamiz.

Loyihani muhokama qilish

Yana o‘qing

G‘oya yoki vazifangiz bormi? Bizga aytib bering

Ish kuni davomida javob beramiz va yechim taklif qilamiz. Konsultatsiya bepul.