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?
Git — versiya 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.docxGit 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
git-scm.comga kiring- Download for Windows ni bosing
- Yuklab oling va o'rnating
- Git Bash — birga keladi (terminal)
macOS
$ git --versionAgar yo'q bo'lsa — Xcode Command Line Tools o'rnatish so'raydi.
Yoki Homebrew bilan:
$ brew install gitLinux (Ubuntu)
$ sudo apt update
$ sudo apt install gitTekshirish
$ git --version
git version 2.42.06. Git sozlash (birinchi marta)
$ git config --global user.name "Akmal Karimov"
$ git config --global user.email "akmal.karimov@gmail.com"Bu — har commit'ga kim qilganligi yoziladi.
Tekshirish:
$ git config --global --list
user.name=Akmal Karimov
user.email=akmal.karimov@gmail.comGitHub'da ishlatadigan email'ni yozing.
Default branch
Yangi Git versiyalarida:
$ git config --global init.defaultBranch mainAsosiy branch main deb nomlanadi (eski versiyalarda master).
7. Git asosiy tushunchalari
| Termin | Ma'no |
|---|---|
| Repository (repo) | Git tomonidan boshqariladigan loyiha |
| Working Directory | Hozir ishlayotganingiz fayllar |
| Staging Area | Commit'ga tayyorlangan o'zgarishlar |
| Commit | O'zgarishlarning saqlangan nusxasi |
| Branch | Tarmoq (boshqa rivojlanish chizig'i) |
| HEAD | Hozirgi pozitsiya |
| Remote | Internetdagi nusxa (masalan, GitHub) |
8. Birinchi repository yaratish
$ 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
$ 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
$ 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 presentGit aytadi: "README.md yangi fayl, lekin men hali kuzatmayapman."
11. git add — staging
$ git add README.md
$ git status
On branch main
No commits yet
Changes to be committed:
new file: README.mdEndi README.md staging area'da — commit'ga tayyor.
Variantlar
$ git add fayl.txt # bitta fayl
$ git add fayl1.txt fayl2.txt # bir nechta
$ git add . # hamma o'zgarishlarni
$ git add *.md # barcha .md fayllar12. git commit — saqlash
$ 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
$ git log
commit abc1234... (HEAD -> main)
Author: Akmal Karimov <akmal@example.com>
Date: Wed May 14 10:30:00 2026 +0500
Initial commitVariantlar:
$ git log --oneline # qisqa
$ git log --all --graph # grafik
$ git log -5 # oxirgi 5 ta14. Ish jarayonini ko'rib chiqamiz
# 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 commitBu — klassik Git workflow.
15. git diff — o'zgarishlarni ko'rish
$ 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:
$ touch .gitignore
$ nano .gitignoreIchiga:
# Maxfiy
.env
config.json
# Vaqtinchalik
*.tmp
*.log
# Tizim fayllari
.DS_Store # macOS
Thumbs.db # Windows
# Dasturlash
node_modules/
__pycache__/
*.pycSaqlang. Endi Git bu fayllarni e'tiborga olmaydi.
17. git rm — Git'dan o'chirish
$ 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):
$ git rm --cached fayl.txt18. git mv — Git'da qayta nomlash
$ git mv eski-nom yangi-nom
$ git commit -m "Rename file"Yoki:
$ 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.
$ 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'chirish20. Asosiy Git workflow
Har ish:
- O'zgartirish
git status— nima o'zgarganini ko'rishgit add— staginggit commit— saqlash- 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 dependenciesYaxshi commit
- Imperativ ifoda: "Add", "Fix", "Update" (Past tense emas)
- 50 belgidan ko'p emas
- Aniq — nima qildi
- Qisqacha — uzun emas
22. Ko'p commit emas, mantiqiy commit
Yomon
1. asdf
2. fixed something
3. more changes
4. ...
5. final final FINALYaxshi
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 documentationHar commit — bitta mantiqiy o'zgarish. Bir vazifa — bir commit.
23. Git GUI dasturlari
Terminalsiz ham Git ishlatish mumkin:
| Dastur | Tavsif |
|---|---|
| GitHub Desktop | Oson, GitHub bilan |
| GitKraken | Chiroyli, pulli versiya bor |
| Sourcetree | Bepul, Atlassian |
| VS Code Git | VS Code ichida (eng oson) |
| Tower | Mac 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
Terminal'da:
bash$ git --versionAgar yo'q —
git-scm.comdan o'rnating.Sozlang:
bash$ git config --global user.name "Sizning ismingiz" $ git config --global user.email "sizning@email.com" $ git config --global init.defaultBranch mainTekshiring:
bash$ git config --global --list
Screenshot va Drive'ga yuklang.
Topshiriq 2 — Birinchi repo
$ 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 logHar qadamdan keyin natijani daftarga yozing.
Topshiriq 3 — O'zgarishlar va commit'lar
Oldingi mening-birinchi-repo ichida:
README.md ichiga 3 ta yangi qator qo'shing:
bash$ echo "## Talaba" >> README.md $ echo "Akmal Karimov" >> README.md $ echo "## Sana: $(date)" >> README.mdStatus va diff'ni ko'ring:
bash$ git status $ git diffAdd va commit:
bash$ git add README.md $ git commit -m "docs: add student info and date"Yana yangi fayl:
bash$ echo "print('Salom')" > script.py $ git status $ git add script.py $ git commit -m "feat: add hello script"Tarix:
bash$ git log --oneline
Topshiriq 4 — .gitignore
Yangi repo yarating: gitignore-test
$ mkdir gitignore-test
$ cd gitignore-test
$ git initYarating quyidagi fayllar:
$ echo "kod" > main.py
$ echo "maxfiy parol" > secret.env
$ echo "vaqtinchalik" > temp.tmp
$ echo "log" > app.log.gitignore yarating:
*.env
*.tmp
*.logTekshiring:
$ git statussecret.env, temp.tmp, app.log ko'rinmasligi kerak.
Topshiriq 5 — Conventional commits
5 ta turli commit yarating, har biri turli tur bilan:
# 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
- VS Code'da
mening-birinchi-repopapkasini oching - Chap tomonda Source Control ikonkasi (tarmoqlanish belgisi)
- README.md ichiga matn qo'shing
- Source Control panel'da o'zgarishlarni ko'ring
- Commit message yozing
- 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:
$ 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:
$ cd ~/Documents
$ mkdir akmal-portfolio
$ cd akmal-portfolio
$ git initYarating:
- README.md — siz haqida
- about.md — biografiya
- projects.md — loyihalar
- .gitignore —
.DS_Store,*.tmp
Har faylga matn yozing.
Har faylni alohida commit qiling:
$ 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)
| Termin | Qisqacha izoh |
|---|---|
| Git | Versiya nazorati tizimi |
| VCS | Version Control System |
| Repository (repo) | Loyiha (Git tomonidan boshqariladi) |
| Working Directory | Hozir ishlayotgan papka |
| Staging Area | Commit'ga tayyor o'zgarishlar |
| Commit | Saqlangan o'zgarish |
| HEAD | Hozirgi pozitsiya |
| Branch | Tarmoq, rivojlanish chizig'i |
git init | Yangi repo yaratish |
git status | Hozirgi holat |
git add | Staging'ga qo'shish |
git commit -m | Saqlash |
git log | Tarix |
git diff | O'zgarishlarni ko'rish |
.gitignore | Kuzatilmaydigan fayllar |
| Conventional Commits | feat, fix, docs va h.k. |