git commit — commit nima, yaxshi commit xabari qanday yoziladi
Muammodan boshlaylik
Olti oy oldingi loyiha tarixi:
a3f9c2b fix
7b2e9c4 update
c1d8e5f fix
9a4b2d1 asdf
e5f6a7b final
2c3d4e5 final 2
f8a9b0c it works
Saytda to'lov ishlamay qoldi. Qaysi commit to'lov kodini o'zgartirgan? Nima uchun? Bu tarix hech narsa aytmaydi — har bir commit ni ochib, kodni o'qib chiqish kerak.
Commit — bu nafaqat kodning surati, balki kelajakdagi o'zingizga va jamoangizga xat. Bu darsda — commit qanday qilinadi va eng muhimi, xabari qanday yoziladi.
Commit nima?
Commit — staging area dagi hamma narsaning doimiy surati, va unga biriktirilgan ma'lumotlar:
| Qism | Misol |
|---|---|
| Hash | a3f9c2b8e1d4... — noyob ID |
| Muallif | Otabek Hasanov <otabek@example.com> |
| Sana | 2026-11-06 14:23:01 +0500 |
| Xabar | "Login: bo'sh parol bilan kirish xatosi tuzatildi" |
| Ota commit | Oldingi commit hash i — tarix zanjiri |
| Surat | Barcha fayllarning shu paytdagi holati |
●──────────●──────────● ← main
c1d8e5f 7b2e9c4 a3f9c2b (HEAD)
↑
ota: 7b2e9c4
Har bir commit oldingisiga ishora qiladi — shu tarzda tarix zanjiri hosil bo'ladi.
Commit qilish
Qisqa xabar bilan
git commit -m "Login sahifasi qo'shildi"
Muharrirda
git commit
Muharrir ochiladi (3-darsda sozlangan). Xabarni yozing, saqlang va yoping. # bilan boshlangan qatorlar — izoh, xabarga kirmaydi. Bo'sh xabar bilan yopsangiz — commit bekor qilinadi.
Uzun, batafsil xabarlar uchun muharrir qulayroq.
Ko'p qatorli xabar terminaldan
git commit -m "To'lov: Payme integratsiyasi" -m "Click o'rniga Payme ishlatiladi, chunki Click API eskirgan. Eski to'lovlar uchun moslik saqlab qolindi."
Har bir -m — alohida paragraf.
add + commit birga
git commit -am "Narxlar formati tuzatildi"
-a — barcha kuzatiladigan o'zgargan fayllarni avtomatik staging ga qo'shadi. Yangi (untracked) fayllar kirmaydi. Kichik tuzatishlar uchun qulay, lekin nima kirayotganini ko'rmaysiz.
Yaxshi commit xabari
Tuzilma
Qisqa sarlavha — 50 belgigacha ← 1-qator
Batafsil tushuntirish (ixtiyoriy). Nima ← bo'sh qatordan keyin
o'zgardi va eng muhimi — NIMA UCHUN. Qatorlar
72 belgigacha.
- Ro'yxat ham bo'lishi mumkin
- Muammo raqami: #42
Qoidalar
1. Sarlavha — qisqa (≤ 50 belgi)
git log --oneline va GitHub da sarlavha qisqartiriladi.
2. Buyruq shaklida yoki natija sifatida — lekin izchil
✅ Login formasiga parol validatsiyasi qo'shish
✅ Login formasiga parol validatsiyasi qo'shildi
❌ Login formasiga parol validatsiyasi qo'shayapman
Ingliz tilida standart — buyruq shakli: Add password validation to login form. Muhimi — jamoada bitta uslub.
3. NIMA va NIMA UCHUN — QANDAY emas
"Qanday" — kodning o'zida ko'rinadi (git diff). Xabar kod aytmaydigan narsani aytsin:
❌ users.js da 42-qatordagi if ni o'zgartirdim
✅ Bloklangan foydalanuvchilar tizimga kira olmasin
Avval faqat parol tekshirilardi, status emas. Natijada
bloklangan hisoblar ham kira olardi (#87).
4. Bitta commit — bitta mantiqiy o'zgarish
Xabarda "va" so'zi ko'p bo'lsa — commit ni bo'lish kerak:
❌ Login tuzatildi va savat qo'shildi va README yangilandi
5. Aniq bo'ling
| ❌ Yomon | ✅ Yaxshi |
|---|---|
| fix | Savatda manfiy miqdor kiritish taqiqlandi |
| update | React 18 dan 19 ga yangilandi |
| changes | Mahsulot kartasi mobil ekranga moslashtirildi |
| wip | (wip commitlarni push qilmang — 26-dars) |
| final | (hech narsa "final" emas) |
[!TIP] Yaxshi tekshiruv: sarlavhani "Agar qo'llansa, bu commit ..." jumlasiga qo'yib ko'ring. "Agar qo'llansa, bu commit savatda manfiy miqdor kiritishni taqiqlaydi" — mantiqiy. "Agar qo'llansa, bu commit fix" — yo'q.
Ko'p jamoalar Conventional Commits standartidan foydalanadi: feat: savat qo'shildi, fix: login xatosi — 34-dars.
Qachon commit qilish kerak?
- Tez-tez — kichik commitlar katta commitlardan yaxshiroq. Kuniga 5–20 ta — normal
- Ishlaydigan holatda — har bir commit dan keyin kod ishga tushishi kerak (aks holda
bisect,revertqiyinlashadi) - Mantiqiy qadam tugaganda — "funksiya qo'shildi", "xato tuzatildi", "refaktoring tugadi"
- Xavfli o'zgarishdan oldin — "saqlash nuqtasi"
Commit — lokal. Uni push qilmaguningizcha (21-dars) hech kim ko'rmaydi, va oxirgisini tuzatish oson (26-dars). Shuning uchun ko'proq commit qilishdan qo'rqmang.
Commit dan keyin
git log --oneline -5
a3f9c2b (HEAD -> main) Bloklangan foydalanuvchilar tizimga kira olmasin
7b2e9c4 Mahsulot kartasi mobil ekranga moslashtirildi
c1d8e5f Savatda manfiy miqdor kiritish taqiqlandi
Endi tarix — o'qiladigan hujjat. 6 oydan keyin "to'lov qachon o'zgardi?" savoliga javob — bir soniyada: git log --oneline --grep="To'lov".
Oxirgi commit xabarida xato qildingizmi? git commit --amend — 26-dars.
Nima uchun shunday?
Nima uchun commit xabariga shuncha e'tibor — kod bor-ku, kod o'zi gapiradi?
Kod nima qilinganini aytadi, lekin nima uchun — hech qachon. Olti oydan keyin g'alati ko'rinadigan if ni ko'rasiz va o'chirmoqchi bo'lasiz — lekin git blame (9-dars) uni ko'rsatgan commit xabari: "Eski iOS brauzerlari uchun — ular bo'sh satrni null deb yuboradi (#142)". Bu bitta jumla sizni bir haftalik xatodan qutqaradi. Commit tarixi — loyihaning xotirasi: odamlar ketadi, Slack xabarlari yo'qoladi, lekin git log loyiha bilan birga yashaydi. Yaxshi xabar yozishga 30 soniya ketadi; yomon xabar keyinroq soatlab vaqt oladi.
Xulosa
Eslab qoling:
- Commit — staging ning surati + muallif, sana, xabar, ota commit
git commit -m "xabar"; batafsil —git commit(muharrir)git commit -am— kuzatiladigan fayllar uchun, yangilarsiz- Sarlavha ≤ 50 belgi; bo'sh qator; keyin batafsil
- Nima va nima uchun — qanday emas
- 1 commit = 1 mantiqiy o'zgarish; "va" ko'p bo'lsa — bo'ling
- Tez-tez, kichik, ishlaydigan holatda commit qiling
- "fix", "update", "final" — yo'q
Keyingi dars
9-dars: git status va git log — o'zgarishlarni va tarixni ko'rish