git status va git log — o'zgarishlarni va tarixni ko'rish
Muammodan boshlaylik
Ikki savol, ular kuniga o'nlab marta tug'iladi:
- "Hozir nima holatda?" — qaysi fayllar o'zgargan, nima commit ga tayyor, qaysi branch dayman?
- "Nima bo'lgan edi?" — kim, qachon, nima o'zgartirgan? Bu qator qachon paydo bo'lgan?
Birinchisiga — git status, ikkinchisiga — git log (va git blame, git show).
git status — hozirgi holat
git status
On branch main
Your branch is ahead of 'origin/main' by 2 commits.
(use "git push" to publish your local commits)
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: src/login.js
new file: src/savat.js
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: README.md
Untracked files:
(use "git add <file>..." to include in what will be committed)
temp.log
O'qish tartibi:
- On branch main — qaysi branch dasiz
- ahead of 'origin/main' by 2 — GitHub ga hali yuborilmagan 2 ta commit (21-dars)
- Changes to be committed — staged (yashil)
- Changes not staged — o'zgargan, lekin staged emas (qizil)
- Untracked — yangi, kuzatilmaydigan
Va har bir bo'limda Git keyingi qadam uchun buyruqni maslahat beradi.
[!TIP]
git statusni har qanday buyruqdan oldin va keyin bajarishni odat qiling. Bu bepul va xavfsiz — hech narsani o'zgartirmaydi. Tajribali dasturchilar uni ongsiz ravishda yozadi.
Qisqa format
git status -s
git status -sb # + branch ma'lumoti
## main...origin/main [ahead 2]
M src/login.js
A src/savat.js
M README.md
?? temp.log
Chap ustun — staging, o'ng ustun — working directory (7-dars).
git log — tarix
git log
commit a3f9c2b8e1d4f6a7b9c0d2e4f6a8b0c2d4e6f8a0 (HEAD -> main, origin/main)
Author: Otabek Hasanov <otabek@example.com>
Date: Fri Nov 6 14:23:01 2026 +0500
Bloklangan foydalanuvchilar tizimga kira olmasin
Avval faqat parol tekshirilardi, status emas.
commit 7b2e9c4...
Author: Malika Karimova <malika@example.com>
Date: Thu Nov 5 18:02:44 2026 +0500
Mahsulot kartasi mobil ekranga moslashtirildi
Eng yangisi — tepada. Uzun bo'lsa less da ochiladi: Space — keyingi sahifa, q — chiqish.
(HEAD -> main, origin/main) — bu commit ga qaysi ko'rsatkichlar ishora qilyapti: siz shu yerdasiz (HEAD), main branch shu yerda, GitHub dagi main ham shu yerda.
Foydali formatlar
git log --oneline
a3f9c2b (HEAD -> main) Bloklangan foydalanuvchilar tizimga kira olmasin
7b2e9c4 Mahsulot kartasi mobil ekranga moslashtirildi
c1d8e5f Savatda manfiy miqdor kiritish taqiqlandi
Kundalik ishda eng ko'p ishlatiladigan shakl.
git log --oneline --graph --all
* e5f6a7b (feature/tolov) Payme integratsiyasi
| * a3f9c2b (HEAD -> main) Bloklangan foydalanuvchilar
|/
* 7b2e9c4 Mahsulot kartasi mobil
* c1d8e5f Savatda manfiy miqdor
--graph — branch lar va merge larni chizadi; --all — barcha branch lar. Branch lar bilan ishlashda juda muhim (3-bo'lim). 3-darsdagi git lg alias i aynan shu.
Filtrlash
git log -5 # oxirgi 5 ta
git log --author="Malika" # muallif bo'yicha
git log --since="2 weeks ago" # vaqt bo'yicha
git log --since="2026-11-01" --until="2026-11-06"
git log --grep="login" # xabarda "login" bo'lganlar
git log -i --grep="to'lov" # registrsiz
git log -- src/login.js # faqat shu faylni o'zgartirganlar
git log -S "calculateTotal" # kodda shu matn qo'shilgan/o'chirilgan commitlar
-S ("pickaxe") — juda kuchli: "bu funksiya qachon paydo bo'lgan yoki o'chirilgan?"
O'zgarishlar bilan
git log -p -2 # oxirgi 2 commit, to'liq diff bilan
git log --stat # har bir commit da qaysi fayllar, nechta qator
a3f9c2b Bloklangan foydalanuvchilar tizimga kira olmasin
src/auth/login.js | 6 +++++-
tests/login.test.js | 18 ++++++++++++++++++
2 files changed, 23 insertions(+), 1 deletion(-)
O'z formatingiz
git log --pretty=format:"%h %ad %an: %s" --date=short
a3f9c2b 2026-11-06 Otabek Hasanov: Bloklangan foydalanuvchilar tizimga kira olmasin
7b2e9c4 2026-11-05 Malika Karimova: Mahsulot kartasi mobil ekranga moslashtirildi
%h qisqa hash, %an muallif, %ad sana, %s sarlavha.
git show — bitta commit
git show a3f9c2b # commit ma'lumoti + to'liq diff
git show HEAD # oxirgi commit
git show HEAD~2 # 2 ta oldingi
git show a3f9c2b:src/login.js # faylning o'sha commit dagi holati
git show --stat HEAD # faqat fayllar ro'yxati
Commitlarga murojaat
| Yozuv | Ma'nosi |
|---|---|
a3f9c2b |
Hash (qisqa — 7 belgi yetarli) |
HEAD |
Joriy commit |
HEAD~1 yoki HEAD~ |
Bitta oldingi |
HEAD~3 |
3 ta oldingi |
main |
main branch ning oxirgi commit i |
v1.2.0 |
Teg (36-dars) |
git blame — har bir qator muallifi
git blame src/login.js
c1d8e5f2 (Malika Karimova 2026-10-12 11:20:05 +0500 10) async function login(email, parol) {
a3f9c2b8 (Otabek Hasanov 2026-11-06 14:23:01 +0500 11) if (user.status === 'blocked') {
a3f9c2b8 (Otabek Hasanov 2026-11-06 14:23:01 +0500 12) throw new Error('Hisob bloklangan');
c1d8e5f2 (Malika Karimova 2026-10-12 11:20:05 +0500 13) }
Har bir qator: qaysi commit, kim, qachon. Keyin git show a3f9c2b8 — nima uchun (commit xabari).
git blame -L 10,20 src/login.js # faqat 10–20 qatorlar
VS Code da GitLens kengaytmasi har bir qator yonida blame ma'lumotini ko'rsatadi. GitHub da — faylni ochib, Blame tugmasi.
[!INFO] "Blame" — "ayblash", lekin maqsad aybdorni topish emas, kontekstni topish: bu qator nima uchun shunday yozilgan? Ko'pincha javob — o'zingizning 3 oy oldingi commit ingiz.
Nima uchun shunday?
Nima uchun Git tarixni shunchalik ko'p usulda ko'rsatadi — log, show, blame, -S, --grep...?
Chunki tarixga turli savollar bilan murojaat qilinadi. "Oxirgi kunlarda nima bo'ldi?" — log --oneline. "Bu xato qachon kirgan?" — log -S. "Bu g'alati qator nima uchun?" — blame + show. "Malika o'tgan hafta nima qildi?" — log --author --since. Tarix — bu loyihaning ma'lumotlar bazasi, va bu buyruqlar — unga so'rovlar. Ularni bilish sizni "kod o'qiydigan" dasturchidan "kod tarixini tushunadigan" dasturchiga aylantiradi — bu legacy loyihalarda va xatolarni tekshirishda juda katta farq qiladi.
Xulosa
Eslab qoling:
git status— joriy holat va keyingi qadam; tez-tez ishlating;-sb— qisqagit log --oneline— ixcham tarix;--graph --all— branch lar bilan- Filtrlar:
-5,--author,--since,--grep,-- fayl,-S "matn" -p— diff bilan;--stat— fayllar statistikasigit show hash— bitta commit;git show hash:fayl— eski versiyaHEAD,HEAD~2, branch nomi, teg — commitlarga murojaatgit blame fayl— har bir qator: kim, qachon, qaysi commit
Keyingi dars
10-dars: git diff — working directory, staging, commit lar orasida solishtirish