git status va git log — o'zgarishlarni va tarixni ko'rish

~15 daq · Git · Git Asoslari

Muammodan boshlaylik

Ikki savol, ular kuniga o'nlab marta tug'iladi:

  1. "Hozir nima holatda?" — qaysi fayllar o'zgargan, nima commit ga tayyor, qaysi branch dayman?
  2. "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:

  1. On branch main — qaysi branch dasiz
  2. ahead of 'origin/main' by 2 — GitHub ga hali yuborilmagan 2 ta commit (21-dars)
  3. Changes to be committed — staged (yashil)
  4. Changes not staged — o'zgargan, lekin staged emas (qizil)
  5. Untracked — yangi, kuzatilmaydigan

Va har bir bo'limda Git keyingi qadam uchun buyruqni maslahat beradi.

[!TIP] git status ni 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 — qisqa
  • git log --oneline — ixcham tarix; --graph --all — branch lar bilan
  • Filtrlar: -5, --author, --since, --grep, -- fayl, -S "matn"
  • -p — diff bilan; --stat — fayllar statistikasi
  • git show hash — bitta commit; git show hash:fayl — eski versiya
  • HEAD, HEAD~2, branch nomi, teg — commitlarga murojaat
  • git blame fayl — har bir qator: kim, qachon, qaysi commit

Keyingi dars

10-dars: git diff — working directory, staging, commit lar orasida solishtirish