4.3-bob: GitHub — remote, push, pull, Pull Request, fork
4-QISM — Git va hamkorlik · 3-mavzu
1. Kirish va motivatsiya
Lokal Git'ni (4.1, 4.2) bildik — lekin u faqat sizning kompyuteringda edi. Real ishda kod bulutda saqlanadi, jamoa u bilan ishlaydi, siz uni boshqa joydan ham olasiz. GitHub — aynan shu: Git loyihalarini saqlash, ulashish va hamkorlik qiladigan dunyodagi eng katta platforma.
GitHub — shunchaki "backup" emas. U — dasturchining portfoli (ish beruvchilar ko'radi), ochiq kod dunyosi (millionlab loyiha), va jamoaviy ishning yuragi: Pull Request orqali kod ko'rib chiqiladi, muhokama qilinadi, sifatli holatda birlashtiriladi.
O'xshatish: lokal Git — uyingizdagi shaxsiy daftar. GitHub — umumiy kutubxona (bulut): daftaringizni u yerga qo'yasiz (push), boshqalar o'qiydi, nusxa oladi, hissa qo'shadi. Pull Request — "men shu o'zgarishni taklif qilaman; ko'rib chiqing, ma'qul bo'lsa qo'shing" degan rasmiy taklif.
Nega muhim?
- Hamkorlik — jamoa bir loyihada (PR, code review — 15.2).
- Portfolio — GitHub profilingiz ish beruvchilarga ko'rinadi 15.8-bob.
- Ochiq kod — millionlab loyiha; hissa qo'shish 15.8-bob.
- CI/CD 10.5-bob, deploy (10), GitHub Actions — GitHub ustida.
GitHub — koddan ko'p: kod saqlashdan tashqari, Issues (vazifa/xato kuzatuvi — "bu yerda bug bor", "shu funksiya kerak" deb yoziladi, muhokama qilinadi), Actions (avtomatlashtirish/CI — push'da test, deploy — 10.5), Projects (kanban taxta) ham bor. Loyiha shu yerda boshqariladi, nafaqat saqlanadi.
2. Nazariya — chuqur tushuntirish
2.1. Remote nima?
Remote — loyihaning uzoq (bulut) nusxasi (GitHub'dagi). Lokal repo 4.1-bob bilan remote o'rtasida kod push (yuklash) va pull (olish) qilinadi:
Lokal (sizning kompyuter) ──push/pull── Remote (GitHub)
.git originorigin — remote'ning standart nomi (odatda asosiy GitHub repo).
2.2. SSH vs HTTPS (ulanish)
GitHub'ga ulanishning ikki usuli 0.4-bob:
- HTTPS —
https://github.com/user/repo.git; har push'da parol/token so'raydi (yoki credential manager). - SSH —
git@github.com:user/repo.git; bir marta SSH kalit (0.2:600ruxsat — 10.1) sozlanadi, keyin parolsiz.
SSH afzal (bir marta sozlasangiz, qulay). SSH kalit yaratish:
ssh-keygen10.1-bob; ochiq kalitni GitHub sozlamalariga qo'shasiz.
2.3. Repo yaratish va ulash
Usul 1 — GitHub'da yaratib, lokalga olish (clone):
git clone https://github.com/user/repo.git # to'liq nusxa + tarix (0.4)
cd repoUsul 2 — Lokalni GitHub'ga ulash:
# GitHub'da bo'sh repo yaratasiz, keyin:
git remote add origin https://github.com/user/repo.git # remote ulash
git branch -M main # branch nomi
git push -u origin main # birinchi push2.4. Push — kodni yuklash
git push # joriy branch'ni remote'ga yuklaydi
git push origin main # aniq: origin remote'ga main branch
git push -u origin feature-x # yangi branch'ni birinchi marta (-u: bog'laydi)
-u(upstream) — lokal va remote branch'ni bog'laydi; keyin shunchakigit push/git pullyetadi.
2.5. Pull va Fetch — kodni olish
git fetch # remote o'zgarishlarini OLADI (lekin merge QILMAYDI)
git pull # fetch + merge (oladi va birlashtiradi)
git pull origin main # aniq
fetchvspull:fetch— o'zgarishlarni ko'rib chiqish uchun oladi (xavfsiz, merge yo'q).pull=fetch+merge(darrov birlashtiradi). Ehtiyot bo'lsangiz — avvalfetch, ko'r, keyin merge.
2.6. Pull Request (PR) — jamoaviy ishning yuragi
Pull Request — "men shu branch'dagi o'zgarishni asosiy kodga qo'shishni taklif qilaman" degan rasmiy so'rov. Bu — kodni ko'rib chiqish (code review — 15.2) va muhokama qilish nuqtasi:
1. feature branch'da ishla 4.2-bob push
2. GitHub'da "Pull Request" och (feature main)
3. Jamoa kodni KO'RIB CHIQADI (review), izoh yozadi
4. CI/CD avtomatik test ishlaydi 10.5-bob
5. Ma'qullansa MERGE (main'ga qo'shiladi)
6. branch o'chiriladiPR — nega muhim: kod boshqa ko'z bilan ko'riladi (xato/yaxshilash topiladi); avtomatik testlar 10.5-bob ishlaydi; tarix muhokama bilan hujjatlanadi. Hech qachon
mainga to'g'ridan-to'g'ri push qilinmaydi — doim PR orqali (jamoa qoidasi).
Protected branch (himoyalangan branch): GitHub'da
mainni sozlamalardan himoyaga olish mumkin — to'g'ridan-to'g'ri push bloklanadi, o'zgarish faqat PR orqali, review va CI o'tgachgina merge bo'ladi. Bu — yuqoridagi qoidani "iltimos" emas, majburiy qiladi (jamoa loyihalarida standart).
2.7. PR ish sikli (amaliy)
# 1. main'ni yangila
git switch main && git pull
# 2. feature branch
git switch -c feature-login
# (kod yoz, commit — 4.1, 4.2)
# 3. push
git push -u origin feature-login
# 4. GitHub'da PR och (web interfeys): feature-login main
# - tavsif yoz, reviewer tayinla
# 5. Review + CI o'tgach "Merge" tugmasi
# 6. Lokalda tozalash
git switch main && git pull && git branch -d feature-login2.8. Fork — boshqaning loyihasiga hissa
Fork — boshqaning repo'sining o'z hisobingizga nusxasi (ochiq kodga hissa uchun — 15.8):
1. GitHub'da loyihani FORK qil (o'z hisobingga nusxa)
2. Fork'ni clone qil (lokalga)
3. branch'da o'zgarish 4.2-bob o'z fork'ingga push
4. ASL loyihaga Pull Request och (fork asl repo)
5. Loyiha egasi ko'rib, ma'qullasa — qo'shadiFork vs Branch: branch — o'zingizning repo ichida. Fork — boshqaning repo'sini o'zingizga nusxalash (yozish huquqingiz yo'q loyihaga hissa qo'shish uchun). Ochiq kod (open source) hissasining standart yo'li.
originvsupstream(fork'ni yangilash): fork qilganda ikki remote bo'ladi —origin(sizning fork'ingiz) vaupstream(asl loyiha). Asl loyiha oldinga ketadi; fork'ingiz orqada qoladi. Yangilab turish uchun asl repo'niupstreamqilib qo'shasiz va undanpullqilasiz:bashgit remote add upstream https://github.com/asl-egasi/repo.git # asl repo git fetch upstream && git merge upstream/main # yangilash
2.9. Remote bilan ishlash buyruqlari
git remote -v # remote'lar ro'yxati
git remote add origin <url> # remote qo'shish
git remote remove origin # o'chirish
git clone <url> # to'liq nusxa olish3. Sintaksis — tez ma'lumotnoma
# Ulash
git clone <url> # nusxa olish
git remote add origin <url> # remote ulash
git push -u origin main # birinchi push
# Kundalik
git push # yuklash
git pull # olish + merge
git fetch # olish (merge'siz)
# PR sikli: branch push -u GitHub PR review merge branch -d
# Fork: fork clone branch push PR (asl repo'ga)4. Batafsil amaliy namunalar
Misol 1 — Lokal loyihani GitHub'ga (2.3)
# Lokal loyiha tayyor (4.1: git init, commit'lar bor)
# GitHub'da bo'sh "todo-app" repo yaratdik, keyin:
git remote add origin https://github.com/ali/todo-app.git # ulash
git branch -M main
git push -u origin main # birinchi push (butun tarix yuklanadi)
# Endi GitHub'da kod ko'rinadiMisol 2 — Kundalik push/pull (2.4, 2.5)
# Ish boshida — eng so'nggi o'zgarishlarni ol
git pull # (jamoadagilar o'zgartirgan bo'lishi mumkin)
# (kod yoz, commit — 4.1)
git add . && git commit -m "Profil sahifasi qo'shildi"
# Ishni yukla
git push # remote'gaMisol 3 — Pull Request sikli (2.7)
git switch main && git pull # yangila
git switch -c feature-search # branch (4.2)
echo "qidiruv kodi" > search.js
git add . && git commit -m "Qidiruv funksiyasi qo'shildi"
git push -u origin feature-search # push
# GitHub'da: feature-search main PR ochiladi
# Tavsif: "Qidiruv funksiyasi: nom bo'yicha real-time qidiruv"
# Review + CI o'tgach Merge
git switch main && git pull # merge'ni lokalga ol
git branch -d feature-search # branch tugadiMisol 4 — Ochiq kodga hissa (fork — 2.8)
# 1. GitHub'da "awesome-project" ni FORK qildik github.com/ali/awesome-project
git clone https://github.com/ali/awesome-project.git # o'z fork'ni clone
cd awesome-project
git switch -c fix-typo # branch
# (xatoni tuzat)
git add . && git commit -m "docs: README imlo xatosi tuzatildi"
git push -u origin fix-typo # o'z fork'ingga
# 2. GitHub'da ASL loyihaga PR och (fork:fix-typo asl:main)
# 3. Loyiha egasi ko'rib, ma'qullasa — qo'shadi (siz hissa qo'shdingiz!)5. To'g'ri va noto'g'ri holatlar
1) mainga to'g'ridan-to'g'ri push (jamoada)
# review'siz to'g'ridan main'ga (jamoa qoidasini buzadi — 2.6)
git switch main && git push
# feature branch PR review merge (2.7)2) Push'dan oldin pull qilmaslik
# eski kod ustiga push rad etiladi yoki conflict
git push # (remote sizdan oldinda)
# avval pull (yangila), keyin push (2.5)
git pull && git push3) Maxfiy ma'lumotni push qilish
# .env, parol, API kalit GitHub'ga (4.5, 14)
git add . && git push # (.env ham ketdi!)
# .gitignore bilan istisno 4.5-bob; tasodifan ketsa — kalitni BEKOR qil4) Push qilingan commit'ni amend/rebase qilish
# jamoa ishlatayotgan tarixni o'zgartirish (4.1, 4.2)
git commit --amend && git push --force
# push qilingach tarixni o'zgartirma; yangi commit qil6. Keng tarqalgan xatolar va yechimlari
Xato 1 — Updates were rejected (non-fast-forward)
Sababi: remote'da sizda yo'q commit'lar bor (kimdir push qilgan — 2.5). Yechimi: git pull (yangila, conflict bo'lsa yech — 4.2), keyin git push.
Xato 2 — Permission denied (publickey)
Sababi: SSH kalit sozlanmagan/noto'g'ri (2.2, 0.2). Yechimi: SSH kalit yarat (ssh-keygen), GitHub'ga qo'sh; yoki HTTPS ishlat.
Xato 3 — remote origin already exists
Sababi: remote allaqachon ulangan 2.9-bob. Yechimi: git remote -v (tekshir); git remote set-url origin <url> (o'zgartirish).
Xato 4 — Maxfiy ma'lumot push qilindi
Sababi: .gitignore yo'q yoki kech 4.5-bob. Yechimi: kalitni darrov bekor qil (yangisini yarat — 14); tarixdan tozalash murakkab.
Xato 5 — fatal: refusing to merge unrelated histories
Sababi: ikki mustaqil tarix (masalan GitHub'da README bor, lokalda boshqa). Yechimi: git pull origin main --allow-unrelated-histories (ehtiyot bilan).
7. Integratsiya — bu mavzu stack'ning qayerida uchraydi
- Git asoslari/branch (4.1, 4.2): lokal commit/branch'lar remote'ga.
- Git workflow 4.4-bob: PR strategiyasi.
- CI/CD 10.5-bob: PR/push'da GitHub Actions avtomatik test/deploy.
- Code review 15.2-bob: PR — review nuqtasi.
- Xavfsizlik (14, 4.5): secrets'ni push qilmaslik.
- Deploy (10, 13.11): GitHub'dan Vercel/server.
- Portfolio/open source 15.8-bob: GitHub profili, fork hissasi.
8. Eng yaxshi amaliyotlar (best practices)
mainga to'g'ridan-to'g'ri push qilma — doim PR orqali (jamoa — 2.6).- Push'dan oldin
pull— yangila, conflict'ni erta hal qil 2.5-bob. - SSH sozla — qulay, xavfsiz 2.2-bob.
- Mazmunli PR tavsifi — nima, nega, qanday sinash 2.6-bob.
- Maxfiy ma'lumotni hech qachon push qilma —
.gitignore(4.5, 14). - Push qilingan tarixni o'zgartirma (amend/force — 4-holat).
- Kichik, fokuslangan PR'lar — review oson; katta PR — qiyin.
- Branch'ni merge'dan keyin o'chir (GitHub avtomatik taklif qiladi).
9. Amaliy loyiha: "GitHub'da To'liq Hamkorlik Sikli"
GitHub, push/pull, PR va fork'ni amalda mustahkamlash.
Maqsad
Remote ulash, push/pull, Pull Request sikli va fork orqali hissa qo'shishni o'zlashtirish.
Talablar (requirements)
- GitHub hisob + SSH: SSH kalit yaratib, GitHub'ga ula 2.2-bob; yoki HTTPS token.
- Loyihani yukla: lokal loyihani 4.1-bob GitHub'ga push (Misol 1); README,
.gitignorebilan 4.5-bob. - Push/pull sikli: o'zgartir commit push; boshqa joydan (yoki GitHub web) o'zgartirib,
pullbilan ol (Misol 2). - Pull Request: feature branch push GitHub'da PR och (o'zingiz review qilib) merge branch o'chir (Misol 3).
- PR tavsifi: mazmunli (nima, nega, qanday sinash — 2.6).
- Fork hissasi: biror ochiq loyihani (yoki do'sting repo'sini) fork qil tuzatish PR (Misol 4, 15.8).
- Conflict simulyatsiyasi: GitHub'da faylni o'zgartir, lokalda ham;
pullconflict yech 4.2-bob. - README'ni chiroyli to'ldir (loyiha tavsifi, ishga tushirish — 0.7).
Maslahatlar (hint)
- SSH:
ssh-keygen -t ed25519, ochiq kalitni GitHub Settings SSH keys. - Birinchi push:
git push -u origin main2.3-bob. - PR: GitHub'da branch push qilingach "Compare & pull request" tugmasi.
- Push rad etilsa:
git pull(2.5, 6-xato). .env/secrets'ni hech qachon push qilma 4.5-bob.- Fork: asl repo'da "Fork" tugmasi, keyin o'z nusxangni clone.
"Tayyor" mezonlari (acceptance criteria)
- SSH/HTTPS bilan GitHub'ga ulanish ishlaydi.
- Loyiha GitHub'da, README + .gitignore bilan.
- Push/pull sikli ishlaydi.
- Kamida bitta to'liq PR (branch PR merge o'chirish).
- PR tavsifi mazmunli.
- Fork orqali biror repo'ga PR ochilgan.
- Conflict yaratilgan va yechilgan.
- Maxfiy ma'lumot push qilinmagan.
Yechim kodi ataylab berilmagan — bu loyihani o'zingiz yozib ko'ring.
10. Xulosa va keyingi bobga ko'prik
Bu bobda Git'ni bulutga ulashni — GitHubni o'rgandik:
- Remote — loyihaning bulut nusxasi (
origin); SSH (qulay) yoki HTTPS bilan ulanadi. clone(nusxa olish),push(yuklash),pull(olish + merge),fetch(olish, merge'siz).- Pull Request — o'zgarishni taklif qilish; code review + CI nuqtasi;
mainga doim PR orqali. - Fork — boshqaning repo'sini o'zingizga nusxalab, ochiq kodga hissa (PR bilan).
- Best: PR orqali ish, push'dan oldin pull, secrets'ni push qilmaslik, tarixni o'zgartirmaslik.
Keyingi bob — 4.4-bob: Git workflow'lar (Gitflow, trunk-based). Git buyruqlarini bildik; endi jamoa ularni qanday tartibda ishlatishini — workflow strategiyalarini — o'rganamiz. Gitflow (rejali relizlar) va trunk-based (uzluksiz yetkazib berish) — qaysi loyihada qaysi biri to'g'ri kelishi.
Foydalanilgan rasmiy/ishonchli manbalar
- docs.github.com — GitHub flow, Pull Requests, fork
- git-scm.com — remote, push/pull/fetch/clone
- Atlassian — comparing workflows, syncing with remotes
Izohlar (0)
Izoh yozish uchun kiring.
- Hozircha izoh yo'q. Birinchi bo'ling!