Bu qo'llanmada GitHub nima ekanligi, Git bilan qanday ishlash, kelib chiqadigan muammolar va ularning yechimlari batafsil yozilgan.
- GitHub nima?
- Git vs GitHub — Farqi
- O'rnatish va Sozlash
- Asosiy Comandalar
- Branch bilan Ishlash
- Pull Request (PR)
- Tez-tez Uchraydigan Muammolar
- Merge Conflict — Batafsil
- GitHub Actions (CI/CD)
- Foydali Buyruqlar Jadvali
GitHub — bu Git repozitoriyalarini internet orqali saqlash, ulashish va jamoaviy boshqarish uchun mo'ljallangan platforma. Microsoft tomonidan xizmat ko'rsatiladi.
GitHub yordamida siz:
- Kodingizni bulutda saqlaysiz
- Jamoa bilan bir loyihada ishlaysiz
- Kodni tarixini ko'rasiz va boshqarasiz
- Pull Request orqali kod tekshirishni tashkillaysiz
- GitHub Actions orqali avtomatik test va deploy qilasiz
- Open-source loyihalarga hissa qo'shasiz
| Xususiyat | Git | GitHub |
|---|---|---|
| Nima u? | Versiya nazorat tizimi | Veb platforma |
| Ishlash joyi | Mahalliy kompyuter | Internet (bulut) |
| Interfeys | Terminal (buyruq qatori) | Veb sayt + API |
| Kimga kerak? | Hamma dasturchi | Jamoaviy loyihalar |
| Bepulmi? | Ha, ochiq manba | Ha (asosiy tarif) |
| O'xshashi | — | GitLab, Bitbucket |
Qisqacha: Git — asbob, GitHub — shu asbobni ishlatish uchun platforma.
# Ubuntu / Debian
sudo apt install git
# macOS (Homebrew orqali)
brew install git
# Windows
# https://git-scm.com/download/win dan yuklab olinggit config --global user.name "Ism Familiya"
git config --global user.email "email@example.com"
# Default branch nomini main qilish
git config --global init.defaultBranch main
# Sozlamalarni ko'rish
git config --list# Kalit yaratish
ssh-keygen -t ed25519 -C "email@example.com"
# Kalitni ko'rish
cat ~/.ssh/id_ed25519.pub
# GitHub'ga qo'shish:
# GitHub → Settings → SSH and GPG keys → New SSH key → paste
# Ulanishni tekshirish
ssh -T git@github.com
# Muvaffaqiyatli: "Hi username! You've successfully authenticated..."# Variant 1: Mahalliy papkani repoga aylantirish
mkdir mening-loyiham
cd mening-loyiham
git init
git remote add origin git@github.com:username/mening-loyiham.git
# Variant 2: GitHub'dan klonlash
git clone git@github.com:username/loyiha.git
cd loyiha# 1. Eng yangi holatni oling
git pull origin main
# 2. Yangi branch oching
git checkout -b feature/vazifa-nomi
# 3. Kod yozing...
# 4. O'zgarishlarni ko'ring
git status
git diff
# 5. Stage qiling
git add .
# 6. Commit qiling
git commit -m "feat: yangi funksiya qo'shildi"
# 7. GitHub'ga yuboring
git push origin feature/vazifa-nomi
# 8. GitHub'da Pull Request oching (UI orqali)# Holat ko'rish
git status
# Tarix ko'rish
git log --oneline --graph --all
# Farqni ko'rish
git diff
git diff HEAD~1
# Remote ko'rish
git remote -v
# Barcha branchlar
git branch -a# Branch yaratish
git checkout -b feature/login
# Branchlar ro'yxati
git branch
# Branchga o'tish
git switch feature/login
# Branchni o'chirish (mahalliy)
git branch -d feature/login
# Branchni GitHub'dan o'chirish
git push origin --delete feature/login
# Remote branchni mahalliyga olish
git fetch origin
git checkout -b feature/login origin/feature/loginmain ●─────────────────────────────● (doim ishga tayyor)
\ /
feature/login ●──●──●──● (PR → merge)
Pull Request — bu GitHub'da kod ko'rib chiqish (code review) jarayoni.
- Branch yaratib, kod yozing
- GitHub'ga push qiling
- GitHub →
Compare & pull requesttugmasini bosing - PR sarlavhasi va tavsifini yozing
- Reviewer tayinlang
- Review tugagach →
Merge pull request
✅ PR sarlavhasi aniq bo'lsin: "feat: foydalanuvchi ro'yxatdan o'tishi qo'shildi"
✅ Kichik PR'lar — 200-400 qator o'zgarish
✅ Screenshot qo'shing (UI o'zgarsa)
✅ Testlar yozilganiga ishonch hosil qiling
✅ Hech bo'lmaganda 1 kishi review qilsin
CONFLICT (content): Merge conflict in fayl.py
Automatic merge failed; fix conflicts and then commit the result.
Sababi: Ikki kishi bir xil faylning bir xil qatorini o'zgartirgan.
Yechimi:
# 1. Conflict bo'lgan fayllarni ko'ring
git status
# 2. Faylni oching — conflict belgisini toping:
<<<<<<< HEAD
sizning o'zgarishingiz
=======
boshqa kishining o'zgarishi
>>>>>>> feature/boshqa-branch
# 3. To'g'ri kodni qoldiring, conflict belgilarini o'chiring
# 4. Stage va commit qiling
git add fayl.py
git commit -m "fix: merge conflict hal qilindi"! [rejected] main -> main (non-fast-forward)
error: failed to push some refs to 'github.com:...'
Sababi: GitHub'da yangi commitlar bor, sizda yo'q.
Yechimi:
# Avval pull qiling
git pull origin main --rebase
# Keyin push
git push origin mainHEAD detached at a1b2c3d
Sababi: Branchga emas, to'g'ridan-to'g'ri commitga o'tilgan.
Yechimi:
# Branchga qaytish
git switch main
# Yoki yangi branch ochish (o'zgarishlarni saqlab)
git switch -c yangi-branch-nomiYechimi:
# Faylni commit'dan olib tashlash (o'zgarishlar saqlanadi)
git reset HEAD~1
git restore --staged maxfiy_fayl.env
# .gitignore ga qo'shing
echo ".env" >> .gitignore
# Qayta commit
git add .
git commit -m "fix: maxfiy fayl olib tashlandi"# Oxirgi commitni olib, to'g'ri branchga ko'chirish
# 1. Commit hash'ni oling
git log --oneline
# 2. To'g'ri branchga o'ting
git checkout to'g'ri-branch
# 3. Commitni ko'chiring
git cherry-pick <commit-hash>
# 4. Noto'g'ri branchdan o'chiring
git checkout noto'g'ri-branch
git reset --hard HEAD~1# Xatoni to'g'irlang
# ...kod o'zgartirildi...
git add .
git commit --amend --no-edit # oxirgi commitga qo'shib yuboring
# Force push (faqat o'zingizning branchingizda!)
git push origin feature/branch --force-with-lease
⚠️ --forceni hech qachonmainbranchda ishlatmang!
# Sababi: fayl avval track qilingan
# Faylni cache'dan olib tashlang
git rm --cached fayl_nomi.env
git rm --cached -r papka/
# Commit qiling
git add .gitignore
git commit -m "fix: gitignore yangilandi"git@github.com: Permission denied (publickey).
Sababi: SSH kalit GitHub'ga qo'shilmagan yoki agent ishlamayapti.
Yechimi:
# SSH agent ishga tushirish
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
# Kalitni tekshirish
ssh -T git@github.com
# Agar HTTPS ishlatmoqchi bo'lsangiz
git remote set-url origin https://github.com/username/loyiha.gitremote: error: File video.mp4 is 150.00 MB; this exceeds GitHub's file size limit of 100 MB
Yechimi:
# Faylni tarixdan o'chirish
git filter-branch --force --index-filter \
"git rm --cached --ignore-unmatch video.mp4" \
--prune-empty --tag-name-filter cat -- --all
# Yoki Git LFS ishlatish (katta fayllar uchun)
git lfs install
git lfs track "*.mp4"
git add .gitattributes
git add video.mp4
git commit -m "chore: LFS bilan katta fayl qo'shildi"
git push origin main# Uncommitted o'zgarishlarni bekor qilish
git restore .
# Oxirgi N ta commitni bekor qilish (mahalliy)
git reset --hard HEAD~3
# GitHub'ga ham qo'llash (EHTIYOT BILAN!)
git push origin main --force-with-leaseVS Code conflict bo'lgan faylda 4 ta tugma ko'rsatadi:
Accept Current Change— sizning o'zgarishingizAccept Incoming Change— boshqa kishining o'zgarishiAccept Both Changes— ikkalasini saqlaCompare Changes— taqqoslash
# Main'dan eng yangi o'zgarishlarni oling
git fetch origin main
# Branchingizni main ustiga "ko'chiring"
git rebase origin/main
# Conflict bo'lsa, hal qiling va davom eting
git add .
git rebase --continue
# Rebase'ni bekor qilish
git rebase --abortGitHub Actions — bu kod push qilinganda avtomatik test va deploy qilish tizimi.
name: Test
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Python o'rnatish
uses: actions/setup-python@v4
with:
python-version: '3.11'
- name: Kutubxonalar o'rnatish
run: pip install -r requirements.txt
- name: Testlarni ishga tushirish
run: pytestQachon ishlatiladi:
- Har bir PR'da testlar o'tkazish
main'ga merge bo'lganda deploy qilish- Kod sifatini avtomatik tekshirish
| Buyruq | Vazifasi |
|---|---|
git clone <url> |
Reponi yuklab olish |
git status |
O'zgarishlar holati |
git add . |
Barcha o'zgarishlarni stage qilish |
git commit -m "..." |
Commit yaratish |
git push origin <branch> |
GitHub'ga yuborish |
git pull origin main |
Yangilanishlarni olish |
git checkout -b <nom> |
Yangi branch yaratish |
git merge <branch> |
Branchni birlashtirish |
git stash |
O'zgarishlarni vaqtinchalik yashirish |
git log --oneline |
Qisqa tarix |
git reset HEAD~1 |
Oxirgi commitni bekor qilish |
git revert <hash> |
Xavfsiz commitni qaytarish |
git cherry-pick <hash> |
Bitta commitni ko'chirish |
git rebase main |
Branchni main ustiga ko'chirish |
git fetch --all |
Barcha yangilanishlarni olish |
git remote -v |
Remote URL ko'rish |
git tag v1.0.0 |
Versiya belgisi qo'yish |
git diff |
O'zgarishlarni solishtirish |
git blame <fayl> |
Kim o'zgartirganini ko'rish |
git bisect |
Xatoni qaysi commitda ekanini topish |
✅ Har kuni ish boshida git pull qiling
✅ Har bir vazifa uchun alohida branch oching
✅ Commit xabarlari aniq va ma'noli bo'lsin
✅ main branchni to'g'ridan-to'g'ri o'zgartirmang
✅ PR'larni kichik hajmda saqlang
✅ .gitignore faylini loyiha boshidan sozlang
✅ Maxfiy ma'lumotlarni (parol, token) hech qachon commit qilmang
✅ --force o'rniga --force-with-lease ishlating
✅ README.md har doim yangilangan bo'lsin
feat: yangi funksiya
fix: xatoni tuzatish
docs: faqat hujjat o'zgarishi
style: formatlash (kod logikasi o'zgarmadi)
refactor: kod qayta tashkil etildi
test: test qo'shildi yoki o'zgartirildi
chore: yordamchi vazifalar (build, paketlar)
perf: ishlash tezligini oshirish
Misol:
feat(auth): JWT token asosida login qo'shildi
- Access va refresh token mexanizmi
- Token muddati 15 daqiqa
- Foydalanuvchi ma'lumotlari PostgreSQL'da saqlanadi
Closes #42
📅 Tayyorlangan: GitHub & Git To'liq Qo'llanma
🔗 Rasmiy hujjatlar: https://docs.github.com