git commit — commit nima, yaxshi commit xabari qanday yoziladi

~15 daq · Git · Git Asoslari

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, revert qiyinlashadi)
  • 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