Skip to content

10-dars: Git asoslari

Dars haqida

Davomiyligi: 90 daqiqa Maqsad: Talaba Git versiya nazoratini tushunishi, asosiy buyruqlarini (init, add, commit, status, log) bilishi va o'z loyihalarini Git bilan boshqarishi kerak.

1. Git nima?

Gitversiya nazorati (Version Control System, VCS) tizimi.

Maqsad: kodning tarixini saqlash — har o'zgartirishni eslab qolish, kerak bo'lsa orqaga qaytarish.

2. Nima uchun Git kerak?

Muammo 1: Versiyalarni saqlash

Git'siz:

loyiha.docx
loyiha-yangi.docx
loyiha-yangi-final.docx
loyiha-yangi-final-FINAL.docx
loyiha-yangi-final-FINAL-V2.docx

Git bilan:

loyiha (commit 1, 2, 3, ..., 100)

Bir fayl, lekin butun tarix saqlanadi.

Muammo 2: Hamkorlikda ishlash

3 ta dasturchi bir loyihada ishlamoqda. Kim qaysi joyni o'zgartirgan? Git aniqlaydi.

Muammo 3: Xatoni orqaga qaytarish

"Kecha hammasi ishlayotgan edi, bugun bo'lmadi!" — Git bilan kechagi versiyaga qaytish mumkin.

Muammo 4: Branching

Yangi xususiyat ustida ishlayapsiz, lekin asosiy versiyani buzmaslik kerak. Branch (shox) yaratasiz.

3. Git va GitHub farqi

Git ≠ GitHub

Git — versiya nazorati dasturi (kompyuteringizda ishlaydi).

GitHub — internetdagi sayt (Git'ni saqlash, ulashish uchun).

Boshqa platformalar: GitLab, Bitbucket — xuddi shu.

Git'siz GitHub bo'lmaydi. Lekin GitHub'siz Git ishlatish mumkin.

4. Git tarixi

  • 2005 — Linus Torvalds (Linux yaratuvchisi) yaratdi
  • Sabab: Linux yadrosi uchun yaxshi VCS kerak edi
  • Ochiq kod, bepul
  • Hozir — dunyodagi standart VCS

5. Git o'rnatish

Windows

  1. git-scm.com ga kiring
  2. Download for Windows ni bosing
  3. Yuklab oling va o'rnating
  4. Git Bash — birga keladi (terminal)

macOS

bash
$ git --version

Agar yo'q bo'lsa — Xcode Command Line Tools o'rnatish so'raydi.

Yoki Homebrew bilan:

bash
$ brew install git

Linux (Ubuntu)

bash
$ sudo apt update
$ sudo apt install git

Tekshirish

bash
$ git --version
git version 2.42.0

6. Git sozlash (birinchi marta)

bash
$ git config --global user.name "Akmal Karimov"
$ git config --global user.email "akmal.karimov@gmail.com"

Bu — har commit'ga kim qilganligi yoziladi.

Tekshirish:

bash
$ git config --global --list
user.name=Akmal Karimov
user.email=akmal.karimov@gmail.com

Email

GitHub'da ishlatadigan email'ni yozing.

Default branch

Yangi Git versiyalarida:

bash
$ git config --global init.defaultBranch main

Asosiy branch main deb nomlanadi (eski versiyalarda master).

7. Git asosiy tushunchalari

TerminMa'no
Repository (repo)Git tomonidan boshqariladigan loyiha
Working DirectoryHozir ishlayotganingiz fayllar
Staging AreaCommit'ga tayyorlangan o'zgarishlar
CommitO'zgarishlarning saqlangan nusxasi
BranchTarmoq (boshqa rivojlanish chizig'i)
HEADHozirgi pozitsiya
RemoteInternetdagi nusxa (masalan, GitHub)

8. Birinchi repository yaratish

bash
$ cd ~
$ mkdir oquv-loyiha
$ cd oquv-loyiha
$ git init
Initialized empty Git repository in /Users/akmal/oquv-loyiha/.git/

git init — papkani Git repo'ga aylantiradi.

Natijada .git papkasi yaratiladi (yashirin, terminal'da ls -a orqali ko'rish mumkin).

.git papkasi

.git papkasini hech qachon o'chirmang yoki o'zgartirmang. Butun loyihaning Git tarixi shu yerda.

9. git status — hozirgi holat

bash
$ git status
On branch main
No commits yet
nothing to commit (create/copy files and use "git add" to track)

git status — eng ko'p ishlatadigan buyruq. Doim ishlating.

10. Birinchi fayl

bash
$ echo "# Mening Loyiham" > README.md
$ ls
README.md
$ git status
On branch main
No commits yet
Untracked files:
  README.md
nothing added to commit but untracked files present

Git aytadi: "README.md yangi fayl, lekin men hali kuzatmayapman."

11. git add — staging

bash
$ git add README.md
$ git status
On branch main
No commits yet
Changes to be committed:
  new file:   README.md

Endi README.md staging area'da — commit'ga tayyor.

Variantlar

bash
$ git add fayl.txt        # bitta fayl
$ git add fayl1.txt fayl2.txt  # bir nechta
$ git add .               # hamma o'zgarishlarni
$ git add *.md            # barcha .md fayllar

12. git commit — saqlash

bash
$ git commit -m "Initial commit"
[main (root-commit) abc1234] Initial commit
 1 file changed, 1 insertion(+)
 create mode 100644 README.md

-m — commit message (xabar).

Commit message

Yaxshi commit message — kelajakda tushunarli:

  • "Add user login form"
  • "Fix bug in payment system"
  • "Update README"

Yomon:

  • "asdf"
  • "fixed"
  • "changes"

13. git log — tarix

bash
$ git log
commit abc1234... (HEAD -> main)
Author: Akmal Karimov <akmal@example.com>
Date:   Wed May 14 10:30:00 2026 +0500

    Initial commit

Variantlar:

bash
$ git log --oneline        # qisqa
$ git log --all --graph    # grafik
$ git log -5               # oxirgi 5 ta

14. Ish jarayonini ko'rib chiqamiz

bash
# 1. Fayl o'zgartirildi
$ echo "## Bo'limlar" >> README.md

# 2. Holatni tekshiramiz
$ git status
Changes not staged for commit:
  modified:   README.md

# 3. Add - staging
$ git add README.md

# 4. Holat
$ git status
Changes to be committed:
  modified:   README.md

# 5. Commit
$ git commit -m "Add sections to README"

# 6. Tarix
$ git log --oneline
def5678 Add sections to README
abc1234 Initial commit

Bu — klassik Git workflow.

15. git diff — o'zgarishlarni ko'rish

bash
$ echo "Yangi qator" >> README.md
$ git diff
diff --git a/README.md b/README.md
index abc..def
--- a/README.md
+++ b/README.md
@@ -1,2 +1,3 @@
 # Mening Loyiham
 ## Bo'limlar
+Yangi qator

- (qizil) — o'chirilgan + (yashil) — qo'shilgan

16. .gitignore — kuzatmaslik

Ba'zi fayllarni Git kuzatmasligi kerak:

  • Maxfiy fayllar (parol, API key)
  • Vaqtinchalik fayllar
  • Logfayllar
  • node_modules (JavaScript)
  • pycache (Python)

Maxsus fayl — .gitignore:

bash
$ touch .gitignore
$ nano .gitignore

Ichiga:

# Maxfiy
.env
config.json

# Vaqtinchalik
*.tmp
*.log

# Tizim fayllari
.DS_Store        # macOS
Thumbs.db        # Windows

# Dasturlash
node_modules/
__pycache__/
*.pyc

Saqlang. Endi Git bu fayllarni e'tiborga olmaydi.

17. git rm — Git'dan o'chirish

bash
$ git rm fayl.txt
$ git commit -m "Remove old file"

Fayl ham diskdan, ham Git'dan o'chiriladi.

Faqat Git'dan o'chirish (diskda qoldirish):

bash
$ git rm --cached fayl.txt

18. git mv — Git'da qayta nomlash

bash
$ git mv eski-nom yangi-nom
$ git commit -m "Rename file"

Yoki:

bash
$ mv eski yangi
$ git add yangi eski
$ git commit -m "..."

19. Branchlar (qisqacha — keyingi darsda batafsil)

Branch — alohida rivojlanish chizig'i. Yangi xususiyat ustida ishlash uchun.

bash
$ git branch              # branchlar ro'yxati
$ git branch yangi-feature # yangi branch yaratish
$ git checkout yangi-feature  # branchga o'tish
$ git checkout -b new     # ikkalasi birga
$ git checkout main       # main'ga qaytish
$ git branch -d yangi-feature  # branch o'chirish

20. Asosiy Git workflow

Har ish:

  1. O'zgartirish
  2. git status — nima o'zgarganini ko'rish
  3. git add — staging
  4. git commit — saqlash
  5. Davom etish

21. Commit message qoidalari

Conventional Commits (mashhur standart)

<tur>: <qisqa tavsif>

Tur misollari:
feat:     yangi xususiyat
fix:      xato tuzatildi
docs:     hujjatlar
style:    formatlash (kod mantiqi o'zgarmadi)
refactor: refactoring
test:     test
chore:    boshqa (build, config va h.k.)

Misollar:

feat: add user login form
fix: correct calculation in payment system
docs: update README with installation steps
style: format code with prettier
refactor: extract validation logic to separate function
test: add unit tests for auth module
chore: update dependencies

Yaxshi commit

  1. Imperativ ifoda: "Add", "Fix", "Update" (Past tense emas)
  2. 50 belgidan ko'p emas
  3. Aniq — nima qildi
  4. Qisqacha — uzun emas

22. Ko'p commit emas, mantiqiy commit

Yomon

1. asdf
2. fixed something
3. more changes
4. ...
5. final final FINAL

Yaxshi

1. feat: initialize project structure
2. feat: add user registration form
3. feat: implement password validation
4. fix: correct email format check
5. docs: add API documentation

Har commit — bitta mantiqiy o'zgarish. Bir vazifa — bir commit.

23. Git GUI dasturlari

Terminalsiz ham Git ishlatish mumkin:

DasturTavsif
GitHub DesktopOson, GitHub bilan
GitKrakenChiroyli, pulli versiya bor
SourcetreeBepul, Atlassian
VS Code GitVS Code ichida (eng oson)
TowerMac uchun professional

Boshlovchi uchun

VS Code'ning Git integratsiyasi — eng oson. Source Control panel (chap tomonda).

Lekin terminal'ni o'rganing — chuqurroq tushunish uchun.

Darsdagi topshiriqlar

Topshiriq 1 — Git o'rnatish va sozlash

  1. Terminal'da:

    bash
    $ git --version

    Agar yo'q — git-scm.com dan o'rnating.

  2. Sozlang:

    bash
    $ git config --global user.name "Sizning ismingiz"
    $ git config --global user.email "sizning@email.com"
    $ git config --global init.defaultBranch main
  3. Tekshiring:

    bash
    $ git config --global --list

Screenshot va Drive'ga yuklang.

Topshiriq 2 — Birinchi repo

bash
$ mkdir mening-birinchi-repo
$ cd mening-birinchi-repo
$ git init
$ echo "# Mening birinchi Git loyiham" > README.md
$ git status
$ git add README.md
$ git status
$ git commit -m "Initial commit"
$ git log

Har qadamdan keyin natijani daftarga yozing.

Topshiriq 3 — O'zgarishlar va commit'lar

Oldingi mening-birinchi-repo ichida:

  1. README.md ichiga 3 ta yangi qator qo'shing:

    bash
    $ echo "## Talaba" >> README.md
    $ echo "Akmal Karimov" >> README.md
    $ echo "## Sana: $(date)" >> README.md
  2. Status va diff'ni ko'ring:

    bash
    $ git status
    $ git diff
  3. Add va commit:

    bash
    $ git add README.md
    $ git commit -m "docs: add student info and date"
  4. Yana yangi fayl:

    bash
    $ echo "print('Salom')" > script.py
    $ git status
    $ git add script.py
    $ git commit -m "feat: add hello script"
  5. Tarix:

    bash
    $ git log --oneline

Topshiriq 4 — .gitignore

Yangi repo yarating: gitignore-test

bash
$ mkdir gitignore-test
$ cd gitignore-test
$ git init

Yarating quyidagi fayllar:

bash
$ echo "kod" > main.py
$ echo "maxfiy parol" > secret.env
$ echo "vaqtinchalik" > temp.tmp
$ echo "log" > app.log

.gitignore yarating:

*.env
*.tmp
*.log

Tekshiring:

bash
$ git status

secret.env, temp.tmp, app.log ko'rinmasligi kerak.

Topshiriq 5 — Conventional commits

5 ta turli commit yarating, har biri turli tur bilan:

bash
# 1. feat
$ echo "// Login funksiyasi" > login.js
$ git add login.js
$ git commit -m "feat: add login function"

# 2. fix
$ echo "// Tuzatildi" >> login.js
$ git add login.js
$ git commit -m "fix: correct login validation"

# 3. docs
$ echo "## Login" >> README.md
$ git add README.md
$ git commit -m "docs: document login API"

# 4. style
$ echo "// Formatlash" >> login.js
$ git add login.js
$ git commit -m "style: format login.js"

# 5. test
$ echo "// Test" > login.test.js
$ git add login.test.js
$ git commit -m "test: add login tests"

git log --oneline natijasini daftarga yozing.

Topshiriq 6 — VS Code Git

  1. VS Code'da mening-birinchi-repo papkasini oching
  2. Chap tomonda Source Control ikonkasi (tarmoqlanish belgisi)
  3. README.md ichiga matn qo'shing
  4. Source Control panel'da o'zgarishlarni ko'ring
  5. Commit message yozing
  6. Commit tugmasini bosing

VS Code ichida ham xuddi shu — lekin chiroyli interfeys bilan.

Screenshot Drive'ga.

Topshiriq 7 — Git history tahlil

Mavjud repo'ni tahlil:

bash
$ git log
$ git log --oneline
$ git log --all --graph --oneline
$ git log --author="Akmal"
$ git log --since="1 day ago"
$ git show <commit-hash>

Har buyruq natijasini ko'ring va daftarga sharhlang.

Topshiriq 8 — O'z loyihangiz

O'zingizning portfolio repo'ngiz:

bash
$ cd ~/Documents
$ mkdir akmal-portfolio
$ cd akmal-portfolio
$ git init

Yarating:

  1. README.md — siz haqida
  2. about.md — biografiya
  3. projects.md — loyihalar
  4. .gitignore.DS_Store, *.tmp

Har faylga matn yozing.

Har faylni alohida commit qiling:

bash
$ git add README.md
$ git commit -m "feat: add portfolio README"

$ git add about.md
$ git commit -m "feat: add about page"

$ git add projects.md
$ git commit -m "feat: add projects list"

$ git add .gitignore
$ git commit -m "chore: add gitignore"

git log --oneline bilan tarixni ko'ring.

Keyingi darsda bu repo'ni GitHub'ga yuklashni o'rganamiz.

Asosiy tushunchalar (lug'at)

TerminQisqacha izoh
GitVersiya nazorati tizimi
VCSVersion Control System
Repository (repo)Loyiha (Git tomonidan boshqariladi)
Working DirectoryHozir ishlayotgan papka
Staging AreaCommit'ga tayyor o'zgarishlar
CommitSaqlangan o'zgarish
HEADHozirgi pozitsiya
BranchTarmoq, rivojlanish chizig'i
git initYangi repo yaratish
git statusHozirgi holat
git addStaging'ga qo'shish
git commit -mSaqlash
git logTarix
git diffO'zgarishlarni ko'rish
.gitignoreKuzatilmaydigan fayllar
Conventional Commitsfeat, fix, docs va h.k.

Keyingi dars

11-dars: GitHub bilan ishlash →

Master IT o'quv markazi — o'qitish rejasi