5-bo‘lim

Tarixni ko'rish va farqlarni solishtirish

git log ning barcha imkoniyatlari, git diff, git show va kerakli kommitni tez topish usullari.

🕑 18 daqiqa o‘qish 📄 695 so‘z 👁 5 marta ko‘rilgan
Ushbu bo‘lim mundarijasi
  1. git log asoslari
  2. Qisqa ko'rinish
  3. Grafik bilan
  4. Filtrlash
  5. Statistika bilan
  6. O'z formatingiz
  7. git show - bitta kommitni ko'rish
  8. git diff - farqlarni ko'rish
  9. Diff ni o'qish
  10. Kim yozgan? git blame
  11. Statistika
  12. Fayl tarixini kuzatish
  13. Amaliy misollar
  14. Xulosa

Kommitlar to'planib borgach, ularni ko'rish va qidirish kerak bo'ladi. Git buning uchun juda kuchli vositalar beradi.

git log asoslari #

Terminal
git log
Natija
commit c9d2e71a4f8b2c5d9e0f3a6b1c4d7e0f2a5b8c31 (HEAD -> main)
Author: Husanboy Qodirov <[email protected]>
Date:   Mon Jun 10 14:22:31 2026 +0500

    Kitoblar sahifasi qo'shildi

commit 1f4c6d9e8a2b5c7d0f3a6b9c2e5d8f1a4b7c0d3e
Author: Husanboy Qodirov <[email protected]>
Date:   Mon Jun 10 13:05:12 2026 +0500

    Loyiha boshlandi
Uzun ro'yxatdan chiqish

git log chiqishi ekranga sig'masa, less ochiladi:

TugmaAmal
SpaceKeyingi sahifa
bOldingi sahifa
/ matnQidirish
qChiqish

Qisqa ko'rinish #

Terminal
git log --oneline
Natija
c9d2e71 Kitoblar sahifasi qo'shildi
5a8b3f0 Bosh sahifa yaratildi
1f4c6d9 Loyiha boshlandi

Bu eng ko'p ishlatiladigan variant.

Grafik bilan #

Terminal
git log --oneline --graph --decorate --all
Natija
* c9d2e71 (HEAD -> main) Kitoblar sahifasi qo'shildi
| * 8f3a1d0 (yangi-dizayn) Ranglar o'zgartirildi
| * 2c7b4e9 Yangi shrift qo'shildi
|/
* 5a8b3f0 Bosh sahifa yaratildi
* 1f4c6d9 Loyiha boshlandi
BayroqNima qiladi
--onelineHar bir kommit bitta satrda
--graphASCII grafik - tarmoqlar ko'rinadi
--decorateTarmoq va teg nomlarini ko'rsatadi
--allFaqat joriy tarmoq emas, hammasi
Buni qisqartma qiling

Bu buyruq juda foydali, lekin uzun. Qisqartma yarating:

Terminal
git config --global alias.tarix "log --oneline --graph --decorate --all"

Endi shunchaki git tarix yozasiz.

Filtrlash #

Terminal
# Oxirgi 5 ta
git log -5

# Muallif bo'yicha
git log --author="Husanboy"

# Xabar matni bo'yicha
git log --grep="savat"

# Sana bo'yicha
git log --since="2026-06-01"
git log --until="2026-06-10"
git log --since="2 weeks ago"
git log --after="yesterday"

# Bitta fayl tarixi
git log -- manba/index.php

# Papka tarixi
git log -- manba/

# Kod ichida qidirish - qaysi kommitda "savat" so'zi qo'shilgan/o'chirilgan
git log -S "savat"

# Doimiy ifoda bilan
git log -G "function hisobla.*"
--grep va -S farqi

--grep - kommit xabarida qidiradi.

-S - kod ichida qidiradi: qaysi kommitda shu matn qo'shilgan yoki o'chirilgan. Bu "bu funksiya qayerdan paydo bo'ldi?" degan savolga javob topishning eng tez usuli.

Statistika bilan #

Terminal
git log --stat -2
Natija
commit c9d2e71 (HEAD -> main)
Author: Husanboy Qodirov <[email protected]>
Date:   Mon Jun 10 14:22:31 2026 +0500

    Kitoblar sahifasi qo'shildi

 manba/kitoblar.php | 24 ++++++++++++++++++++++++
 README.md          |  2 +-
 2 files changed, 25 insertions(+), 1 deletion(-)
Terminal
# Yanada qisqaroq
git log --shortstat --oneline -3
Natija
c9d2e71 Kitoblar sahifasi qo'shildi
 2 files changed, 25 insertions(+), 1 deletion(-)
5a8b3f0 Bosh sahifa yaratildi
 1 file changed, 8 insertions(+)
1f4c6d9 Loyiha boshlandi
 1 file changed, 1 insertion(+)

O'z formatingiz #

Terminal
git log --pretty=format:"%h %ad | %an | %s" --date=short
Natija
c9d2e71 2026-06-10 | Husanboy Qodirov | Kitoblar sahifasi qo'shildi
5a8b3f0 2026-06-10 | Husanboy Qodirov | Bosh sahifa yaratildi
1f4c6d9 2026-06-10 | Husanboy Qodirov | Loyiha boshlandi
BelgiMa'nosi
%HTo'liq xesh
%hQisqa xesh
%anMuallif ismi
%aeMuallif emaili
%adSana
%arNisbiy sana ("2 kun oldin")
%sKommit sarlavhasi
%bKommit tavsifi
%dTarmoq va teg nomlari
Terminal
# Chiroyli rangli format
git log --pretty=format:"%C(yellow)%h%Creset %C(green)%ar%Creset %C(blue)%an%Creset %s" -5

git show - bitta kommitni ko'rish #

Terminal
git show c9d2e71
Natija
commit c9d2e71a4f8b2c5d9e0f3a6b1c4d7e0f2a5b8c31
Author: Husanboy Qodirov <[email protected]>
Date:   Mon Jun 10 14:22:31 2026 +0500

    Kitoblar sahifasi qo'shildi

diff --git a/manba/kitoblar.php b/manba/kitoblar.php
new file mode 100644
index 0000000..e7c9f1a
--- /dev/null
+++ b/manba/kitoblar.php
@@ -0,0 +1,3 @@
+<?php
+$kitoblar = ['O\'tkan kunlar', 'Mehrobdan chayon'];
+echo implode(', ', $kitoblar);
Terminal
# Oxirgi kommit
git show

# Oxirgidan oldingi
git show HEAD~1

# Uch kommit oldingi
git show HEAD~3

# Faqat bitta faylni
git show HEAD:manba/index.php

# Faqat o'zgargan fayllar ro'yxati
git show --stat HEAD
HEAD~ va HEAD^ farqi
  • HEAD~1 - bitta ota-kommit orqaga
  • HEAD~3 - uchta orqaga
  • HEAD^ - HEAD~1 bilan bir xil (odatiy holatda)
  • HEAD^2 - ikkinchi ota (faqat merge kommitida ma'noga ega)

Kundalik ishda ~ yetarli.

git diff - farqlarni ko'rish #

Ish papkasi tahrirlangan fayllar Sahna git add qilingan HEAD oxirgi kommit git diff git diff --staged git diff HEAD
Qaysi ikki hudud solishtirilishini bilib oling
Terminal
# Ish papkasi va sahna orasidagi farq
git diff

# Sahna va oxirgi kommit orasidagi farq
git diff --staged
git diff --cached      # bir xil

# Ish papkasi va oxirgi kommit orasidagi hamma farq
git diff HEAD

# Ikki kommit orasidagi farq
git diff 1f4c6d9 c9d2e71

# Ikki tarmoq orasidagi farq
git diff main yangi-dizayn

# Bitta fayl uchun
git diff manba/index.php

Diff ni o'qish #

Natija
diff --git a/manba/index.php b/manba/index.php
index e7c9f1a..b3d5f80 100644
--- a/manba/index.php
+++ b/manba/index.php
@@ -3,7 +3,9 @@
 $sarlavha = 'Kutubxona';
 
-echo $sarlavha;
+echo '<h1>' . $sarlavha . '</h1>';
+
+$kitoblar_soni = 128;
 
 // Oxiri
ElementMa'nosi
a/...Eski versiya
b/...Yangi versiya
@@ -3,7 +3,9 @@Eski faylning 3-satridan 7 satr, yangisining 3-satridan 9 satr
- bilan boshlanganO'chirilgan satr
+ bilan boshlanganQo'shilgan satr
Bo'sh joy bilanO'zgarmagan (kontekst uchun)
Bo'sh joy o'zgarishlarini yashirish

Faqat otstuplar o'zgargan bo'lsa, diff juda katta bo'lib ketadi:

Terminal
git diff -w              # bo'sh joyni e'tiborsiz qoldirish
git diff --word-diff     # so'z darajasida farq
git diff --stat          # faqat statistika

Kim yozgan? git blame #

Terminal
git blame manba/index.php
Natija
1f4c6d9e (Husanboy Qodirov 2026-06-10 13:05:12 +0500  1) <?php
5a8b3f00 (Jasur Toshmatov  2026-06-11 09:14:33 +0500  2) $sarlavha = 'Kutubxona';
c9d2e71a (Husanboy Qodirov 2026-06-12 14:22:31 +0500  3) echo '<h1>' . $sarlavha . '</h1>';

Har bir satr yonida - uni oxirgi marta o'zgartirgan kommit, muallif va sana.

Terminal
# Faqat 10-20 satrlar
git blame -L 10,20 manba/index.php

# Bo'sh joy o'zgarishlarini e'tiborsiz qoldirish
git blame -w manba/index.php
blame - ayblash uchun emas

Nomiga qaramay, bu vosita "kim aybdor" degan savol uchun emas.

U "bu satr nima uchun shunday yozilgan?" degan savolga javob beradi: kommitni topib, uning xabarini o'qiysiz va sababni bilasiz.

Bu yana bir bor yaxshi kommit xabari yozish naqadar muhimligini ko'rsatadi.

Statistika #

Terminal
# Kim nechta kommit qilgan
git shortlog -sn
Natija
    47  Husanboy Qodirov
    31  Jasur Toshmatov
    12  Malika Yusupova
Terminal
# Jami kommitlar soni
git rev-list --count HEAD
Natija
90
Terminal
# Bugungi kommitlar
git log --since="midnight" --oneline

Fayl tarixini kuzatish #

Terminal
# Fayl nomi o'zgargan bo'lsa ham kuzatish
git log --follow -- manba/kitoblar.php

# Har bir kommitdagi o'zgarish bilan
git log -p -- manba/kitoblar.php

# Faqat oxirgi 3 o'zgarish
git log -p -3 -- manba/kitoblar.php
--follow nima uchun kerak?

Git fayl nomi o'zgarishini alohida saqlamaydi - u buni taxmin qiladi. --follow bayrog'isiz nomi o'zgargan faylning eski tarixi ko'rinmaydi.

Amaliy misollar #

Terminal
# "Bu xato qachon paydo bo'ldi?"
git log -S "hisobla(" --oneline -- manba/savat.php

# "Kecha kim nima qildi?"
git log --since="yesterday" --pretty=format:"%an: %s"

# "Bu haftada nechta fayl o'zgardi?"
git diff --stat HEAD@{7.days.ago} HEAD

# "Ikki reliz orasida nima o'zgardi?"
git log --oneline v1.0..v2.0

# "Bu tarmoqda qanday yangilik bor?"
git log --oneline main..yangi-dizayn
.. sintaksisi

A..B - "B da bor, lekin A da yo'q kommitlar" degani.

Terminal
git log main..feature    # feature da qo'shilgan yangi ishlar
git log feature..main    # feature ortda qolgan kommitlar

Bu Pull Request tayyorlashda juda foydali.

Amaliy topshiriq
  1. Repozitoriyingizda kamida 5 ta kommit yarating.
  2. git log --oneline --graph --decorate --all ni ishga tushiring va qisqartma yarating.
  3. --author va --grep bilan filtrlab ko'ring.
  4. Bitta faylni o'zgartiring va git diff bilan farqni ko'ring.
  5. git add qiling va git diff endi bo'sh ekaniga e'tibor bering.
  6. git diff --staged bilan sahnadagi farqni ko'ring.
  7. git show HEAD~2 bilan eski kommitni oching.
  8. git blame bilan bitta faylning har bir satri kim tomonidan yozilganini ko'ring.
  9. git log -S "biror_soz" bilan kod ichida qidirib ko'ring.

Xulosa #

  • git log --oneline --graph --decorate --all - eng foydali variant.
  • --author, --grep, --since bilan tarixni filtrlash mumkin.
  • -S kod ichida qidiradi, --grep kommit xabarida.
  • git show - bitta kommitning to'liq mazmuni.
  • git diff - ish papkasi va sahna orasidagi farq.
  • git diff --staged - sahna va oxirgi kommit orasidagi farq.
  • git blame - har bir satr qaysi kommitdan kelganini ko'rsatadi.
  • A..B sintaksisi ikki nuqta orasidagi kommitlarni beradi.

Keyingi bo'limda fayllarni ko'chirish, o'chirish va .gitignore ni o'rganamiz.

Xatolik topdingizmi?

Imlo xatosi, ishlamaydigan kod yoki noto‘g‘ri ma‘lumotni ko‘rsangiz - bizga xabar bering. Har bir xabar administrator tomonidan ko‘rib chiqiladi.