git add — fayllarni staging ga qo'shish, . va fayl nomi farqi
Muammodan boshlaylik
Ko'p qo'llanmalarda shunday yoziladi:
git add .
git commit -m "update"
Va bir kuni GitHub dan xat keladi: "Sizning repozitoriyingizda AWS kaliti topildi". git add . hamma narsani qo'shgan edi — .env faylini ham. Yoki 200 MB lik node_modules ni.
git add — oddiy buyruq, lekin uning turli shakllari turlicha xatti-harakatga ega. Bu darsda — qaysi birini qachon ishlatish.
Asosiy shakllar
git add index.html # bitta fayl
git add index.html style.css # bir nechta fayl
git add src/ # papka (ichidagi hammasi)
git add *.css # naqsh bo'yicha
git add . # joriy papka va ichidagi hammasi
git add -A # butun repozitoriydagi hamma o'zgarishlar
git add -u # faqat kuzatiladigan fayllar (yangilar emas)
. va -A — farqi
| Buyruq | Yangi fayllar | O'zgarganlar | O'chirilganlar | Qamrov |
|---|---|---|---|---|
git add . |
✅ | ✅ | ✅ | Joriy papka va ichidagilar |
git add -A |
✅ | ✅ | ✅ | Butun repozitoriy |
git add -u |
❌ | ✅ | ✅ | Butun repozitoriy |
Repozitoriyning ildizida turgan bo'lsangiz — . va -A bir xil. src/ ichida turgan bo'lsangiz — git add . faqat src/ ni qo'shadi.
-u (update) — "faqat Git allaqachon kuzatayotgan fayllardagi o'zgarishlar": tasodifiy yangi fayllar (loglar, vaqtinchalik fayllar) kirmaydi.
git add . — qachon xavfli
git add . — qulay, lekin ko'r-ko'rona. Xavfsiz ishlatish uchun ikki shart:
.gitignoreto'g'ri sozlangan (11-dars) —node_modules,.env, build papkalar, OS fayllari- Avval
git status— nima qo'shilishini ko'ring
git status # 1. Nima o'zgargan?
git add . # 2. Qo'shish
git status # 3. Staging da nima borligini tekshirish
git commit -m "..."
[!WARNING] Parollar, API kalitlari,
.envfayllar bir marta commit qilinsa — keyin o'chirsangiz ham, ular tarixda qoladi. GitHub ga push qilingan bo'lsa — botlar ularni bir necha daqiqada topadi. Yagona to'g'ri yechim — kalitni darhol bekor qilish (yangisini yaratish), keyin tarixni tozalash. Eng yaxshisi — bunga yo'l qo'ymaslik:.gitignorevagit status.
git add -p — faylning bir qismini
Bitta faylda ikki xil o'zgarish: xato tuzatish va debug uchun console.log. Faqat tuzatishni commit qilmoqchisiz:
git add -p login.js
Git o'zgarishlarni bo'laklarga (hunk) ajratib, har biri uchun so'raydi:
@@ -12,7 +12,7 @@ function login(email, parol) {
- if (parol.length > 0) {
+ if (parol && parol.length >= 8) {
return tekshir(email, parol);
}
(1/2) Stage this hunk [y,n,q,a,d,s,e,?]? y
@@ -30,6 +30,7 @@ function tekshir(email, parol) {
+ console.log('DEBUG:', email, parol);
const user = await db.find(email);
(2/2) Stage this hunk [y,n,q,a,d,s,e,?]? n
| Tugma | Nima |
|---|---|
| y | Ha — bu bo'lakni qo'shish |
| n | Yo'q — o'tkazib yuborish |
| s | Bo'lakni kichikroq qismlarga bo'lish (split) |
| q | Chiqish |
| a / d | Fayldagi qolgan barchasini qo'shish / o'tkazish |
| ? | Yordam |
Natija: tuzatish — staging da, console.log — working directory da qoldi.
[!TIP]
git add -pni hech qanday fayl nomisiz ishlatish ham mumkin — barcha o'zgargan fayllarni birma-bir ko'rib chiqadi. Bu commit qilishdan oldin o'z kodingizni ko'rib chiqishning ajoyib usuli: nima kiritayotganingizni ko'rasiz va tasodifiy debug qatorlarini ushlaysiz.
VS Code da xuddi shu narsa — Source Control panelida faylni ochib, kerakli qatorlarni belgilab, o'ng tugma → Stage Selected Ranges.
Staging dan olib tashlash
Adashib qo'shdingiz:
git add .env
git restore --staged .env # staging dan olib tashlash (fayl o'zgarmaydi)
Eski versiyalarda va qo'llanmalarda — git reset HEAD .env (xuddi shu narsa).
Hammasini staging dan olish:
git restore --staged .
Faylni Git kuzatuvidan butunlay chiqarish (lekin diskda qoldirish):
git rm --cached .env
echo ".env" >> .gitignore
Bu — .env allaqachon commit qilingan bo'lsa kerak (keyingi commit dan boshlab kuzatilmaydi; tarixdagi nusxasi baribir qoladi).
O'chirish va ko'chirish
git rm eski.js # diskdan o'chirish + staging ga "o'chirildi" deb qo'yish
git mv eski.js yangi.js # nomini o'zgartirish + staging ga
Bu rm eski.js && git add eski.js ning qisqartmasi. Oddiy rm yoki muharrirda o'chirsangiz ham bo'ladi — keyin git add -A o'chirishni ham qo'shadi.
Nima qo'shilganini ko'rish
git status # qaysi fayllar staged
git status -s # qisqa format
git diff --staged # staging da aynan nima o'zgargan (10-dars)
Qisqa format:
M login.js ← staged (chap ustun)
M config.js ← modified, staged emas (o'ng ustun)
MM style.css ← ikkalasi: bir qismi staged, keyin yana o'zgargan
A savat.js ← yangi, staged
?? temp.log ← untracked
Nima uchun shunday?
Nima uchun git add -p kabi "nozik" vosita kerak — butun faylni qo'shish oddiyroq-ku?
Chunki fayl — mantiqiy birlik emas. Bitta faylda bir vaqtda xato tuzatish, refaktoring va yangi funksiya bo'lishi mumkin. Agar Git faqat butun fayllarni qabul qilsa, siz yo ularni bitta "aralash" commit ga tiqasiz, yo ishlashni to'xtatib, har bir o'zgarishni alohida qilasiz. add -p bu tanlovni olib tashlaydi: erkin ishlaysiz, keyin tarixni toza yozasiz. Qo'shimcha foydasi — har bir bo'lakni ko'rib chiqish o'z-o'zidan code review: ko'p xatolar va unutilgan debug kodlar aynan shu bosqichda ushlanadi.
Xulosa
Eslab qoling:
git add fayl— aniq;git add .— joriy papka;-A— butun repo;-u— faqat kuzatiladigangit add .dan oldin —.gitignorevagit status- Sirlar commit qilinsa — kalitni darhol bekor qiling
git add -p— bo'laklab: y/n/s/qgit restore --staged fayl— staging dan olishgit rm --cached fayl— kuzatishni to'xtatish, diskda qoldirishgit rm,git mv— o'chirish va nom o'zgartirishgit status -s— qisqa holat
Keyingi dars
8-dars: git commit — commit nima, yaxshi commit xabari qanday yoziladi