Git va GitHub

Git asosiy buyruqlari

Endi Git bilan haqiqiy ish boshlaymiz. Bu darsda kundalik amaliyotda eng ko'p ishlatiladigan buyruqlarni โ€” repozitoriy yaratishdan tortib o'zgarishlarni saqlashgacha โ€” real misollar bilan bosqichma-bosqich o'rganamiz. Har bir buyruqni yozib, natijasini ko'rib chiqamiz.

Git'ning uch bo'limi: ishchi katalog, staging, repozitoriy

Git'ni tushunish uchun uning uch asosiy hududini bilish shart. Bir fayl ushbu bo'limlar orasida harakatlanadi:

Ishchi katalog        Staging            Repozitoriy
(tahrirlayotgan)  ->  (tayyorlangan)  ->  (saqlangan tarix)
                 add               commit

Ya'ni fayl avval git add bilan staging'ga qo'yiladi, so'ng git commit bilan repozitoriyga doimiy yoziladi. Bu ikki bosqichli tizim sizga aynan nimani saqlashni aniq nazorat qilish imkonini beradi.

Nega ikki bosqich? Tasavvur qiling, siz o'nlab faylni o'zgartirdingiz, ammo faqat 2 tasini birga saqlamoqchisiz. Staging aynan shuni imkon beradi: kerakli fayllarni add qilib, faqat ularni commit qilasiz.

git init โ€” repozitoriy yaratish

Har qanday papkani Git repozitoriysiga aylantirish uchun git init buyrug'i ishlatiladi. Avval loyiha papkangizga o'ting, so'ng buyruqni bajaring:

mkdir mening-loyiham
cd mening-loyiham
git init

Bu yerda mkdir yangi papka yaratadi, cd o'sha papkaga kiradi, git init esa uni repozitoriyga aylantiradi. Muvaffaqiyatli bajarilsa, quyidagiga o'xshash xabar chiqadi:

Initialized empty Git repository in /home/ali/mening-loyiham/.git/

Aslida git init qiladigan yagona ish โ€” papka ichida yashirin .git nomli katalog yaratish. Aynan shu katalogda Git barcha tarixni saqlaydi. Uni o'chirsangiz, papka oddiy papkaga aylanadi (fayllar qoladi, lekin tarix yo'qoladi).

git initni uy papkangizda yoki noto'g'ri joyda tasodifan bajarmang. Uni faqat aniq loyiha papkangiz ichida ishga tushiring, aks holda butun kompyuteringizni kuzatishga urinib, chalkashlik yuzaga keladi.

git status โ€” hozirgi holatni ko'rish

git status โ€” Git bilan ishlashda eng ko'p ishlatiladigan buyruq. U hozirgi holatni ko'rsatadi: qaysi fayllar o'zgargan, qaysilari staging'da, qaysilari hali kuzatilmayapti. Har bir amaldan oldin va keyin uni ishlatish yaxshi odat.

git status

Yangi, bo'sh repozitoriyda natija shunday bo'ladi:

On branch main

No commits yet

nothing to commit (create/copy files and use "git add" to track)

Endi papkaga bitta fayl qo'shaylik va holatni yana ko'raylik:

echo "# Mening loyiham" > README.md
git status

Bu safar Git yangi faylni kuzatilmayotgan (untracked) deb ko'rsatadi:

On branch main

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        README.md

nothing added to commit but untracked files present
Untracked (kuzatilmagan) fayl โ€” Git hali "bilmaydigan" yangi fayl. Uni tarixga qo'shish uchun avval git add qilish kerak. Git chiqarayotgan xabarlar odatda keyingi qadamni ham aytib beradi โ€” ularni o'qish foydali.

git add โ€” o'zgarishlarni staging'ga qo'shish

git add fayllarni ishchi katalogdan staging'ga ko'chiradi โ€” ya'ni ularni keyingi commit uchun tayyorlaydi. Bitta faylni qo'shish uchun uning nomini yozing:

git add README.md

Endi git status faylni yashil rangda, staging'ga qo'shilgan ("changes to be committed") holida ko'rsatadi:

On branch main

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   README.md

Bir nechta faylni birga qo'shish uchun ularni ketma-ket yozish yoki barchasini nuqta (.) bilan qo'shish mumkin:

git add fayl1.txt fayl2.txt

# yoki barcha o'zgargan fayllarni birdan:
git add .

Bu yerda git add . โ€” joriy papka va uning barcha ostki papkalaridagi o'zgargan/yangi fayllarni bir vaqtda staging'ga qo'shadi. Bu eng ko'p ishlatiladigan shakl.

git add . qulay, lekin ehtiyot bo'ling โ€” u hamma narsani qo'shadi. Muhim bo'lmagan yoki maxfiy fayllar (masalan parollar) tasodifan qo'shilmasligi uchun .gitignore faylidan foydalaning va vaqti-vaqti bilan git statusni tekshiring.

git commit โ€” o'zgarishlarni saqlash

Staging'dagi o'zgarishlarni doimiy tarixga yozish uchun git commit ishlatiladi. Har bir commit'ga qisqa izoh (message) yozish shart โ€” u nima o'zgarganini tushuntiradi. Izohni -m bayrog'i bilan beriladi:

git commit -m "Birinchi commit: README qo'shildi"

Muvaffaqiyatli bajarilgach, Git commit haqida qisqa ma'lumot chiqaradi:

[main (root-commit) a1b2c3d] Birinchi commit: README qo'shildi
 1 file changed, 1 insertion(+)
 create mode 100644 README.md

Bu yerda:

-m bayrog'isiz git commit yozsangiz, Git izoh yozishingiz uchun matn muharririni ochadi. Agar bilmagan muharrir (masalan Vim) ochilib qolsa, chiqib ketolmay qolishingiz mumkin. Yangi boshlovchilar uchun har doim -m "izoh" shaklini ishlatish osonroq.

Yaxshi commit izohi qisqa, aniq va o'zgarish nimani qilishini tushuntiradigan bo'lishi kerak. Yomon va yaxshi misollar:

# Yomon (ma'nosiz):
git commit -m "o'zgarish"
git commit -m "tuzatish"

# Yaxshi (aniq):
git commit -m "Kirish formasiga email tekshiruvi qo'shildi"
git commit -m "Bosh sahifadagi sarlavha xatosi tuzatildi"

git log โ€” commit tarixini ko'rish

Qilingan barcha commit'larni ko'rish uchun git log ishlatiladi. U eng yangi commit'dan boshlab, har birining hash'i, muallifi, sanasi va izohini ko'rsatadi:

git log
commit a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0
Author: Ali Valiyev <ali@example.com>
Date:   Tue Jul 1 10:30:00 2026 +0500

    Birinchi commit: README qo'shildi

To'liq log ba'zan juda uzun bo'ladi. Uni ixchamroq, bir qatorli ko'rinishda ko'rish uchun --oneline bayrog'ini qo'shing:

git log --oneline
c4d5e6f Bosh sahifa dizayni yangilandi
b2c3d4e README fayli yangilandi
a1b2c3d Birinchi commit: README qo'shildi

Bu ko'rinishda har commit qisqa hash va izoh bilan bir qatorga sig'adi โ€” tarixni tez ko'zdan kechirish uchun juda qulay. Yana bir foydali variant โ€” commit'lar va tarmoqlarni grafik ko'rinishda chiqarish:

git log --oneline --graph --all
git log ochilganda ekran ba'zan "to'xtab" qoladi (pager rejimi). Undan chiqish uchun q (quit) harfini bosing. Yuqoriga-pastga strelka tugmalari bilan yurish mumkin.

Faylni o'zgartirish oqimi (to'liq misol)

Endi barcha buyruqlarni birga, real ish oqimi ko'rinishida ko'raylik. Aytaylik, mavjud README.md faylini o'zgartiramiz:

# 1. Faylni o'zgartiramiz (yangi qator qo'shamiz)
echo "Bu loyiha Git o'rganish uchun." >> README.md

# 2. Holatni tekshiramiz
git status

# 3. O'zgarishni staging'ga qo'yamiz
git add README.md

# 4. Commit qilamiz
git commit -m "README'ga loyiha tavsifi qo'shildi"

# 5. Tarixni ko'ramiz
git log --oneline

2-qadamdagi git status bu safar faylni o'zgartirilgan (modified) deb ko'rsatadi โ€” chunki fayl yangi emas, avval commit qilingan, endi tahrirlangan:

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
        modified:   README.md
E'tibor bering: yangi fayl untracked, avval commit qilinib keyin o'zgartirilgan fayl esa modified deb belgilanadi. Ikkalasi ham git add orqali staging'ga qo'shiladi โ€” jarayon bir xil.

git diff โ€” farqlarni ko'rish

git diff fayllardagi aniq nima o'zgarganini qator-qatorlab ko'rsatadi. Bu commit qilishdan oldin "men nima o'zgartirdim?" degan savolga javob beradi. Staging'ga qo'yilmagan o'zgarishlarni ko'rish uchun:

git diff

Natijada qo'shilgan qatorlar + bilan, o'chirilgan qatorlar esa - bilan ko'rsatiladi:

diff --git a/README.md b/README.md
index 1a2b3c4..5d6e7f8 100644
--- a/README.md
+++ b/README.md
@@ -1,1 +1,2 @@
 # Mening loyiham
+Bu loyiha Git o'rganish uchun.

Agar o'zgarishlarni allaqachon git add bilan staging'ga qo'ygan bo'lsangiz, oddiy git diff hech nima ko'rsatmaydi. Staging'dagi (commit'ga tayyorlangan) farqlarni ko'rish uchun --staged bayrog'ini qo'shing:

git diff --staged

Amaliyotdagi tartib odatda shunday: avval git diff bilan o'zgarishlarni ko'rib chiqasiz, so'ng ishonch hosil qilib, git add va git commit qilasiz.

Commit qilishdan oldin git diff yoki git statusni ko'rib chiqishni odat qiling. Bu tasodifan kerakmas o'zgarish yoki maxfiy ma'lumotni saqlab qo'yishning oldini oladi.

Kundalik buyruqlar tartibi (qisqa eslatma)

Yuqoridagi barcha buyruqlarni bitta ketma-ketlikda jamlaymiz โ€” bu Git bilan har kungi ishning asosiy takrorlanadigan sikli:

git status                 # nima o'zgarganini ko'rish
git diff                   # aniq farqlarni ko'rish
git add .                  # o'zgarishlarni tayyorlash
git commit -m "izoh"        # saqlash
git log --oneline          # tarixni tekshirish
Bu besh buyruq Git ishining 80% ni tashkil etadi. Ularni yaxshi o'zlashtirib olsangiz, keyingi darslardagi murakkabroq mavzular (tarmoqlar, GitHub'ga yuborish) ancha oson tuyuladi.

Xulosa