5-bo‘lim
Tarixni ko'rish va farqlarni solishtirish
git log ning barcha imkoniyatlari, git diff, git show va kerakli kommitni tez topish usullari.
Ushbu bo‘lim mundarijasi
Kommitlar to'planib borgach, ularni ko'rish va qidirish kerak bo'ladi. Git buning uchun juda kuchli vositalar beradi.
git log asoslari #
git log
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
git log chiqishi ekranga sig'masa, less ochiladi:
| Tugma | Amal |
|---|---|
| Space | Keyingi sahifa |
| b | Oldingi sahifa |
| / matn | Qidirish |
| q | Chiqish |
Qisqa ko'rinish #
git log --oneline
c9d2e71 Kitoblar sahifasi qo'shildi
5a8b3f0 Bosh sahifa yaratildi
1f4c6d9 Loyiha boshlandi
Bu eng ko'p ishlatiladigan variant.
Grafik bilan #
git log --oneline --graph --decorate --all
* 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
| Bayroq | Nima qiladi |
|---|---|
--oneline | Har bir kommit bitta satrda |
--graph | ASCII grafik - tarmoqlar ko'rinadi |
--decorate | Tarmoq va teg nomlarini ko'rsatadi |
--all | Faqat joriy tarmoq emas, hammasi |
Bu buyruq juda foydali, lekin uzun. Qisqartma yarating:
git config --global alias.tarix "log --oneline --graph --decorate --all"
Endi shunchaki git tarix yozasiz.
Filtrlash #
# 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 #
git log --stat -2
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(-)
# Yanada qisqaroq
git log --shortstat --oneline -3
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 #
git log --pretty=format:"%h %ad | %an | %s" --date=short
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
| Belgi | Ma'nosi |
|---|---|
%H | To'liq xesh |
%h | Qisqa xesh |
%an | Muallif ismi |
%ae | Muallif emaili |
%ad | Sana |
%ar | Nisbiy sana ("2 kun oldin") |
%s | Kommit sarlavhasi |
%b | Kommit tavsifi |
%d | Tarmoq va teg nomlari |
# 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 #
git show c9d2e71
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);
# 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^ farqiHEAD~1- bitta ota-kommit orqagaHEAD~3- uchta orqagaHEAD^-HEAD~1bilan bir xil (odatiy holatda)HEAD^2- ikkinchi ota (faqat merge kommitida ma'noga ega)
Kundalik ishda ~ yetarli.
git diff - farqlarni ko'rish #
# 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 #
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
| Element | Ma'nosi |
|---|---|
a/... | Eski versiya |
b/... | Yangi versiya |
@@ -3,7 +3,9 @@ | Eski faylning 3-satridan 7 satr, yangisining 3-satridan 9 satr |
- bilan boshlangan | O'chirilgan satr |
+ bilan boshlangan | Qo'shilgan satr |
| Bo'sh joy bilan | O'zgarmagan (kontekst uchun) |
Faqat otstuplar o'zgargan bo'lsa, diff juda katta bo'lib ketadi:
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 #
git blame manba/index.php
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.
# 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 emasNomiga 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 #
# Kim nechta kommit qilgan
git shortlog -sn
47 Husanboy Qodirov
31 Jasur Toshmatov
12 Malika Yusupova
# Jami kommitlar soni
git rev-list --count HEAD
90
# Bugungi kommitlar
git log --since="midnight" --oneline
Fayl tarixini kuzatish #
# 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 #
# "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
.. sintaksisiA..B - "B da bor, lekin A da yo'q kommitlar" degani.
git log main..feature # feature da qo'shilgan yangi ishlar
git log feature..main # feature ortda qolgan kommitlar
Bu Pull Request tayyorlashda juda foydali.
- Repozitoriyingizda kamida 5 ta kommit yarating.
git log --oneline --graph --decorate --allni ishga tushiring va qisqartma yarating.--authorva--grepbilan filtrlab ko'ring.- Bitta faylni o'zgartiring va
git diffbilan farqni ko'ring. git addqiling vagit diffendi bo'sh ekaniga e'tibor bering.git diff --stagedbilan sahnadagi farqni ko'ring.git show HEAD~2bilan eski kommitni oching.git blamebilan bitta faylning har bir satri kim tomonidan yozilganini ko'ring.git log -S "biror_soz"bilan kod ichida qidirib ko'ring.
Xulosa #
git log --oneline --graph --decorate --all- eng foydali variant.--author,--grep,--sincebilan tarixni filtrlash mumkin.-Skod ichida qidiradi,--grepkommit 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..Bsintaksisi ikki nuqta orasidagi kommitlarni beradi.
Keyingi bo'limda fayllarni ko'chirish, o'chirish va .gitignore ni o'rganamiz.
O‘qish tarixini saqlamoqchimisiz?
Tizimga kirsangiz, tugatgan bo‘limlaringiz saqlanadi va qoldirgan joyingizdan davom etasiz.
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.