IlmHamroh
JavaScript Full-stack/7-qism. Git va GitHub asoslari34/36-dars23 daqiqa
Mundarija (43)

GitHub CLI (gh): PR, issue va repolarni terminaldan boshqarish

Qisqacha: gh — GitHub'ning rasmiy terminal dasturi. Git tarixni boshqaradi, gh esa GitHub saytidagi narsalarni: issue, Pull Request, workflow, repo sozlamalari. gh auth login bilan bir marta kirasiz, keyin gh pr create, gh pr checkout 6, gh pr merge --squash, gh run watch kabi buyruqlar brauzerga chiqmasdan ishlaydi. Qolgan hamma narsa uchun gh api bor — u GitHub API'siga to'g'ridan-to'g'ri so'rov yuboradi.

Bu darsda

  • gh ni o'rnatib, gh auth login jarayonini va gh auth status natijasini tushuntira olasiz.
  • Issue va PR'ni terminaldan yaratasiz, ko'rasiz, hamkasbning PR'ini gh pr checkout bilan o'z kompyuteringizda ochasiz.
  • PR'ni gh pr merge bilan qo'shasiz va ruleset rad etsa, xabarini o'qiysiz.
  • gh run list va gh run watch bilan avtomatik ishlarni kuzatasiz.
  • gh api bilan istalgan ma'lumotni olasiz va oldingi darsdagi rulesetni terminaldan yaratasiz.

Oldin bilishingiz kerak: Branch himoyasi va rulesets, Pull Request: yaratish, muhokama, merge, Issues, Projects va shablonlar.

1. Nega bu kerak?

Oldingi darsda portfolio'ga bitta qator qo'shdik. Yo'lni sanab ko'ring: terminalda commit va push, brauzerda PR havolasini ochish, sarlavha yozish, Create pull request, keyin Squash and merge, Delete branch, yana terminalga qaytib git pull. Bitta kichik o'zgarish uchun ikki oyna orasida besh-olti marta yugurdik.

Kuniga o'nta PR qiladigan dasturchi uchun bu soatlab vaqt. Undan ham yomoni — diqqat bo'linadi: brauzerga o'tdingiz, Telegram xabari ko'zingizga tushdi, o'n daqiqa ketdi.

GitHub CLI shu yo'lni terminalga olib keladi:

bash
gh pr create --title "Aloqa: Telegram havolasini qo'sh" --body "..."
gh pr merge --squash --delete-branch

Ikki buyruq — PR ochildi, qo'shildi, branch o'chdi, lokal main yangilandi.

Hayotiy o'xshatish: bank ilovasi va bank bo'limi. To'lovni bo'limga borib ham qilsa bo'ladi — navbat, blankalar, imzo. Ilovada esa o'sha to'lov ikki bosishda bo'ladi. Bank o'sha, qoidalar o'sha, faqat yo'l qisqa. gh — GitHub'ning terminaldagi "ilovasi": sayt bilan bir xil ishlarni qiladi va bir xil qoidalarga (masalan, rulesetga) bo'ysunadi.

2. gh ni o'rnatish va kirish

2.1 Git emas, alohida dastur

GitHub CLI (gh, CLI — command line interface, buyruq satri interfeysi) — GitHub kompaniyasining rasmiy dasturi. U Git'ning qismi emas. Git har qanday serverda ishlaydi — GitHub, GitLab yoki o'zingizning serveringizda. gh esa faqat GitHub bilan gaplashadi.

Farqni yodda tuting:

Ish Kim qiladi
commit, branch, merge, rebase git
push, pull, fetch git
PR, issue, release, workflow gh
Repo yaratish va sozlamalari gh (yoki brauzer)

2.2 O'rnatish

Windows'da rasmiy yo'l — WinGet (Windows'ning o'z paket menejeri). PowerShell'da:

powershell
winget install --id GitHub.cli --source winget

macOS'da — brew install gh, Linux'da — cli.github.com saytidagi tarqatmangizga mos yo'riqnoma.

Diqqat: O'rnatuvchi PATH'ni o'zgartiradi (Muhit o'zgaruvchilari va PATH darsidan tanish). GitHub CLI hujjatiga ko'ra, Windows Terminal'da yangi oyna ochish kerak — yangi tab yetmaydi. Eski oynada gh: command not found chiqadi.

Tekshiramiz (Git Bash'da):

bash
gh --version
text
gh version 2.92.0 (2026-04-28)
https://github.com/cli/cli/releases/tag/v2.92.0

Sizda versiya yangiroq bo'lishi mumkin — gh tez-tez yangilanadi. Yangilash: winget upgrade --id GitHub.cli --source winget.

2.3 gh auth login

gh sizning nomingizdan ish qiladi: PR ochadi, merge qiladi. Buning uchun GitHub'ga bir marta kirish kerak:

bash
gh auth login

Buyruq bir nechta savol beradi (savollar matni — gh 2.92 manba kodidan):

  1. Where do you use GitHub? ("GitHub'ni qayerda ishlatasiz?") — GitHub.com.
  2. What is your preferred protocol for Git operations on this host? ("Git qaysi yo'l bilan ulansin?") — SSH kalit sozlagan bo'lsangiz — SSH, aks holda HTTPS.
  3. HTTPS tanlasangiz: Authenticate Git with your GitHub credentials? ("Git ham shu kirish bilan ishlasinmi?") — Yes. Shunda git push ham parol so'ramaydi: Git kalitni gh dan oladi.
  4. How would you like to authenticate GitHub CLI? ("Qanday kirasiz?") — Login with a web browser (brauzer orqali).
  5. Terminal bir martalik kod beradi (First copy your one-time code: ...) va Press Enter deydi. Enter bosasiz, brauzer github.com/login/device sahifasini ochadi. Kodni kiritib, ruxsat berasiz.
  6. Terminalda Logged in as login chiqadi (login o'rnida — sizning loginingiz).

Parol terminalga yozilmaydi. Brauzer orqali kirganingizdan keyin GitHub gh ga token beradi — SSH kalit va autentifikatsiya darsidagi parol o'rnidagi maxfiy satrning o'zi. gh uni Windows'ning himoyalangan xotirasida (Credential Manager) saqlaydi.

2.4 gh auth status

Kim bo'lib kirganingizni tekshirish:

bash
gh auth status
text
github.com
  ✓ Logged in to github.com account login (keyring)
  - Active account: true
  - Git operations protocol: https
  - Token: gho_***************************************
  - Token scopes: 'gist', 'read:org', 'repo', 'workflow'

Chiqishlarda haqiqiy loginni login ga, haqiqiy repo nomini login/login.github.io ga almashtirdik. Biz vaqtinchalik sinov reposida ishladik.

  • (keyring) — token tizimning himoyalangan xotirasida.
  • Token: gho_**** — gh tokenni o'zi yulduzchalar bilan yashiradi. Shunday bo'lishi kerak.
  • Token scopes — token nimaga ruxsat oladi. repo — repolar bilan ishlash, workflow — .github/workflows/ dagi fayllarni o'zgartirish (keyingi darsda kerak bo'ladi).

Diqqat: Token — parol bilan teng. Uni chatga, skrinshotga, kodga qo'ymang. gh auth token buyrug'i tokenni ochiq ko'rsatadi — ekraningizni birov ko'rib turganda ishlatmang. Kompyuterdan voz kechsangiz: gh auth logout.

Kirmagan holatda istalgan buyruq shuni aytadi:

text
To get started with GitHub CLI, please run:  gh auth login
Alternatively, populate the GH_TOKEN environment variable with a GitHub API authentication token.

Tarjimasi: "GitHub CLI bilan ishlashni boshlash uchun gh auth login ni ishga tushiring. Yoki GH_TOKEN muhit o'zgaruvchisiga token yozing". Ikkinchi yo'l — avtomatik ishlar uchun (masalan, GitHub Actions ichida), qo'lda ishlash uchun emas.

Tekshirib ko'ring: gh auth login da HTTPS va "Authenticate Git with your GitHub credentials? — Yes" tanladingiz. Endi git push qilsangiz, parol so'raladimi?

Javob

Yo'q. gh o'zini Git uchun "kalit beruvchi" (credential helper) qilib sozlaydi. git push GitHub'ga kirish kerak bo'lganda kalitni gh dan so'raydi. Ya'ni bitta kirish ikkala dastur uchun ishlaydi.

3. Repo bilan ishlash

3.1 gh repo view

Portfolio papkasida turib:

bash
gh repo view
text
login/login.github.io
IlmHamroh 07-qism (Git) darslari uchun vaqtinchalik sinov repo — qism tugagach o'chiriladi

This repository does not have a README

View this repository on GitHub: https://github.com/login/login.github.io

gh qaysi repo haqida gapirayotganini o'zi topdi — git remote dagi origin manzilidan. Ikkinchi qator — repo tavsifi (description). Bizning sinov reposimizda shunday yozilgan edi; sizda — GitHub asoslari darsida yozgan tavsifingiz. README bo'lsa, uning matni ham shu yerda chiqadi.

Dastur o'qishi uchun qulay shakl — --json va kerakli maydonlar:

bash
gh repo view --json name,visibility,defaultBranchRef
text
{"defaultBranchRef":{"name":"main"},"name":"login.github.io","visibility":"PUBLIC"}

Bu — JSON formati. Deyarli har gh buyrug'ida --json bor. Keyinroq, skript yozishni o'rganganingizda, bu juda qo'l keladi.

Repo sahifasini brauzerda ochish: gh browse. -n flagi ochmaydi, faqat manzilni chiqaradi:

bash
gh browse -n
text
https://github.com/login/login.github.io

3.2 gh repo clone

Hamkasbingiz Malika portfolio'ingizni o'z kompyuterida ko'rmoqchi. Unga git clone ning qisqa shakli yetadi:

bash
gh repo clone login/login.github.io nusxa
text
Cloning into 'nusxa'...

To'liq URL o'rniga egasi/nom yetadi. Protokol (SSH yoki HTTPS) gh auth login dagi tanlovingizdan olinadi.

3.3 gh repo create

Yangi repo yaratish ham terminaldan bo'ladi. Masalan, mashqlar papkangiz hali faqat lokal bo'lsa, uning ichida:

bash
gh repo create mashqlar --public --source=. --push

Flaglar (gh repo create --help dan): --public yoki --private — ko'rinish, --source=. — joriy papkadagi lokal repo asos bo'lsin, --push — lokal commitlarni darhol yuborsin. Bu buyruq GitHub'da yangi repo ochadi, origin ni ulaydi va push qiladi — GitHub asoslari darsidagi brauzer yo'lining hammasi bitta qatorda.

Biz bu buyruqni sinov uchun ishga tushirmadik — u haqiqiy akkauntda yangi repo yaratadi. Qachon kerak bo'lsa, o'z akkauntingizda bemalol ishlating.

4. Issue terminaldan

4.1 Yaratish

Portfolio'ning loyihalar sahifasi bo'sh. Buni vazifa sifatida yozib qo'yamiz (Issues darsidagi kabi, lekin terminaldan):

bash
gh issue create --title "Loyihalar: Bahor kartasi yo'q" \
  --body "Loyihalar sahifasida hali birorta loyiha yo'q. \
Bahor saytini qo'shish kerak."
text

Creating issue in login/login.github.io

https://github.com/login/login.github.io/issues/5

\ — qator oxirida "buyruq keyingi qatorda davom etadi" degani (HTTP metodlari darsidagi curl misolidan tanish). Issue raqami — #5. Sinov reposida oldin boshqa issue va PR'lar ham bo'lgani uchun raqam 5 chiqdi. Raqam issue va PR uchun umumiy — sizda boshqacha bo'ladi.

--title va --body ni yozmasangiz, gh ularni savol-javob bilan so'raydi. Bu ham qulay.

4.2 Ro'yxat va ko'rish

bash
gh issue list
text

Showing 1 of 1 open issue in login/login.github.io

ID  TITLE                          LABELS  UPDATED
#5  Loyihalar: Bahor kartasi yo'q          less than a minute ago

Standart holatda faqat ochiq (open) issue'lar. Hammasini ko'rish — gh issue list --state all.

bash
gh issue view 5
text
Loyihalar: Bahor kartasi yo'q login/login.github.io#5
Open • login (Aziz Karimov) opened less than a minute ago • 0 comments


  Loyihalar sahifasida hali birorta loyiha yo'q. Bahor saytini qo'shish kerak.


View this issue on GitHub: https://github.com/login/login.github.io/issues/5

Holat (Open), muallif, vaqt, izohlar soni va matn. Izoh qoldirish — gh issue comment 5 --body "...", yopish — gh issue close 5.

5. Pull Request terminaldan

5.1 Branch, commit, gh pr create

Issue'ni bajaramiz. Odatdagi Git qadamlari:

bash
git switch -c feature/loyihalar-bahor
git add sayt
git commit -m "Loyihalar: Bahor kartasini qo'sh"
git push -u origin feature/loyihalar-bahor
text
Switched to a new branch 'feature/loyihalar-bahor'
[feature/loyihalar-bahor 3437065] Loyihalar: Bahor kartasini qo'sh
 1 file changed, 2 insertions(+)
remote:
remote: Create a pull request for 'feature/loyihalar-bahor' on GitHub by visiting:
remote:      https://github.com/login/login.github.io/pull/new/feature/loyihalar-bahor
remote:
To https://github.com/login/login.github.io.git
 * [new branch]      feature/loyihalar-bahor -> feature/loyihalar-bahor
branch 'feature/loyihalar-bahor' set up to track 'origin/feature/loyihalar-bahor'.

GitHub yana PR havolasini berdi. Lekin endi brauzerga chiqmaymiz:

bash
gh pr create --title "Loyihalar: Bahor kartasini qo'sh" \
  --body "Loyihalar sahifasiga birinchi karta. Closes #5"
text
https://github.com/login/login.github.io/pull/6

PR #6 ochildi. gh o'zi tushundi: joriy branch — feature/loyihalar-bahor, maqsad — standart branch main. Boshqa maqsad kerak bo'lsa — --base.

Closes #5 — Issues darsidagi kalit so'z: PR merge bo'lganda issue #5 avtomatik yopiladi.

Foydali flaglar:

  • --fill — sarlavha va matnni commit xabaridan oladi. Bitta commitli PR uchun qulay.
  • --draft — qoralama PR (Pull Request darsidagi kabi).
  • --web — formani brauzerda ochadi, agar uzun tavsifni u yerda yozmoqchi bo'lsangiz.

5.2 Ro'yxat, ko'rish, holat

bash
gh pr list
text

Showing 1 of 1 open pull request in login/login.github.io

ID  TITLE                             BRANCH                   CREATED AT
#6  Loyihalar: Bahor kartasini qo'sh  feature/loyihalar-bahor  less than a minute ago
bash
gh pr view 6
text
Loyihalar: Bahor kartasini qo'sh login/login.github.io#6
Open • login (Aziz Karimov) wants to merge 1 commit into main from feature/loyihalar-bahor • less than a minute ago
+2 -0 • No checks


  Loyihalar sahifasiga birinchi karta. Closes #5


View this pull request on GitHub: https://github.com/login/login.github.io/pull/6

+2 -0 — ikki qator qo'shilgan, hech biri o'chirilmagan. No checks — PR'da avtomatik tekshiruv yo'q. Buni boshqa buyruq ham tasdiqlaydi:

bash
gh pr checks 6
text
no checks reported on the 'feature/loyihalar-bahor' branch

Tarjimasi: "branch uchun hech qanday tekshiruv natijasi kelmagan". Hozircha bu to'g'ri. Keyingi darsda har PR'da npm run check avtomatik ishlaydigan qilamiz — shunda bu buyruq yashil yoki qizil natija ko'rsatadi.

Hamma PR'laringiz bir joyda:

bash
gh pr status
text

Relevant pull requests in login/login.github.io

Current branch
  #6  Loyihalar: Bahor kartasini qo'sh [feature/loyihalar-bahor]

Created by you
  #6  Loyihalar: Bahor kartasini qo'sh [feature/loyihalar-bahor]

Requesting a code review from you
  You have no pull requests to review

Uchta bo'lim: joriy branch'ning PR'i, siz ochganlar va sizdan review kutayotganlar. Jamoada uchinchi bo'lim har kuni ertalab ochiladi.

5.3 Hamkasbning PR'ini tekshirish: gh pr checkout

Code review darsida aytgan edik: yaxshi reviewer kodni faqat o'qimaydi, ishga tushirib ham ko'radi. Buning uchun PR branchini o'z kompyuteriga olish kerak. Malikaning nusxasida:

bash
cd ../nusxa
gh pr checkout 6
git log --oneline -3
text
From https://github.com/login/login.github.io
 * [new branch]      feature/loyihalar-bahor -> origin/feature/loyihalar-bahor
Switched to a new branch 'feature/loyihalar-bahor'
branch 'feature/loyihalar-bahor' set up to track 'origin/feature/loyihalar-bahor'.
3437065 (HEAD -> feature/loyihalar-bahor, origin/feature/loyihalar-bahor) Loyihalar: Bahor kartasini qo'sh
a2a3d58 (origin/main, origin/HEAD, main) Aloqa: Telegram havolasini qo'sh (#4)
3fbf72b Deploy: Pages workflow'ini qo'sh

Bitta buyruq ikki ishni qildi: git fetch (branchni olib keldi) va git switch (unga o'tdi). Branch nomini bilish shart emas — PR raqami yetadi. (3fbf72b — sinov reposidagi qisqa nomli Pages commiti, Branch himoyasi darsida aytganimizdek; sizda u Deploy: sayt/ ni Pages'ga yuklaydigan workflow qo'sh.) Endi Malika Live Server'da loyihalar sahifasini ochib ko'radi.

gh pr diff 6 — o'zgarishni terminalda ko'rsatadi, xuddi git diff kabi. gh pr review 6 --approve — tasdiqlash, --request-changes -b "..." — o'zgartirish so'rash, --comment -b "..." — izoh.

5.4 Ruleset gh ni ham to'xtatadi

Oldingi darsda yolg'iz loyihada "Required approvals: 1" xavfli ekanini aytgan edik. Endi haqiqiy xabarni ko'ramiz. Rulesetda tasdiqlar sonini vaqtincha 1 qildik va merge'ga urindik:

bash
gh pr merge 6 --squash
text
X Pull request login/login.github.io#6 is not mergeable: the base branch policy prohibits the merge.
To have the pull request merged after all the requirements have been met, add the `--auto` flag.
To use administrator privileges to immediately merge the pull request, add the `--admin` flag.

Tarjimasi: "PR #6 ni qo'shib bo'lmaydi: asosiy branch siyosati merge'ni taqiqlaydi". Keyingi ikki qator — ikki maslahat:

  • --auto — "talablar bajarilganda o'zi merge qilsin". PR kutib turadi, tasdiq kelgach GitHub uni o'zi qo'shadi.
  • --admin — admin huquqi bilan chetlab o'tish. Bizning rulesetda bypass ro'yxati bo'sh — bu flag ham yordam bermaydi. Shunday bo'lishi kerak.

Xo'p, o'zimiz tasdiqlaymiz-chi?

bash
gh pr review 6 --approve
text
failed to create review: GraphQL: Review Can not approve your own pull request (addPullRequestReview)

Tarjimasi: "review yaratilmadi: o'z PR'ingizni tasdiqlay olmaysiz". GraphQL — gh GitHub bilan gaplashadigan API turlaridan biri, uning nomi xabarda shunchaki ko'rinib qoladi. Mana shuning uchun yolg'iz loyihada tasdiqlar soni 0 bo'ladi. Rulesetni 0 ga qaytardik.

5.5 gh pr merge

bash
gh pr merge 6 --squash --delete-branch
text
✓ Squashed and merged pull request login/login.github.io#6 (Loyihalar: Bahor kartasini qo'sh)
From https://github.com/login/login.github.io
 * branch            main       -> FETCH_HEAD
   a2a3d58..115b100  main       -> origin/main
Updating a2a3d58..115b100
Fast-forward
 sayt/loyihalar/index.html | 2 ++
 1 file changed, 2 insertions(+)
✓ Deleted local branch feature/loyihalar-bahor and switched to branch main
✓ Deleted remote branch feature/loyihalar-bahor

Bitta buyruq to'rt ish qildi:

  1. GitHub'da PR'ni squash usulida qo'shdi (main da yangi commit 115b100).
  2. Lokal main ni yangiladi — bu git pull ning o'zi (Updating ... Fast-forward).
  3. Lokal branchni o'chirib, main ga o'tkazdi.
  4. GitHub'dagi branchni o'chirdi.

Oldingi darsdagi brauzer va terminal orasidagi yugurish — bitta qatorda. Usul flaglari: --squash, --rebase, --merge. Bizning rulesetda chiziqli tarix yoqilgan — --merge "Merge commits are not allowed" bilan qaytadi.

Issue holatini tekshiramiz:

bash
gh issue view 5
text
Loyihalar: Bahor kartasi yo'q login/login.github.io#5
Closed • login (Aziz Karimov) opened less than a minute ago • 0 comments
...

Closed — Closes #5 ishladi. (Pastki qatorlar oldingisi bilan bir xil, ... bilan qisqartirdik.)

Butun sikl bitta rasmda:

flowchart LR
  A["gh issue create<br/>#5"] --> B["git switch -c<br/>commit, push"]
  B --> C["gh pr create<br/>#6"]
  C --> D["gh pr checkout 6<br/>hamkasb sinaydi"]
  D --> E["gh pr review"]
  E --> F["gh pr merge<br/>--squash"]
  F --> G["issue #5<br/>yopildi"]

Nimaga qarang: chap uchdan o'ng uchgacha hamma qadam terminalda. Brauzer faqat ixtiyoriy — uzun muhokama yoki rasmni ko'rish uchun.

Tekshirib ko'ring: gh pr merge 6 --squash --delete-branch dan keyin git pull yozish kerakmi?

Javob

Yo'q. Chiqishdagi Updating a2a3d58..115b100 va Fast-forward — bu gh ichida bajarilgan pull. gh lokal main ni ham yangiladi va unga o'tkazdi. Faqat boshqa kompyuterdagi nusxalar (masalan, Malikanikida) eski holatda qoladi — u yerda git pull kerak.

6. gh run: avtomatik ishlarni kuzatish

Remote darsida portfolio'ga .github/workflows/pages.yml faylini ko'chirgan edingiz. U har main ga push'da saytni Pages'ga joylaydi. Bu avtomatik ish GitHub serverida bajariladi. Uni brauzerdagi Actions bo'limida kuzatish mumkin — yoki terminalda.

6.1 Workflow va run

Ikki so'z:

  • Workflow — avtomatik ish "retsepti": .github/workflows/ dagi YAML fayl. Bizda bittasi — Pages.
  • Run — retseptning bir marta bajarilishi. Har push yangi run boshlaydi.
bash
gh workflow list
text
NAME   STATE   ID
Pages  active  371805243

pages.yml da workflow_dispatch qatori bor. U "qo'lda ishga tushirish mumkin" degani. Saytni push'siz qayta joylash kerak bo'lsa:

bash
gh workflow run pages.yml
text
✓ Created workflow_dispatch event for pages.yml at main
https://github.com/login/login.github.io/actions/runs/36818467242

To see the created workflow run, try: gh run view 36818467242
To see runs for this workflow, try: gh run list --workflow="pages.yml"

6.2 gh run list

bash
gh run list --workflow pages.yml --limit 3
text
STATUS  TITLE  WORKFLOW  BRANCH  EVENT              ID           ELAPSED  AGE
*       Pages  Pages     main    workflow_dispatch  36818467242  7s       less than a minute ago
✓       Pages  Pages     main    workflow_dispatch  36818286675  18s      about 2 minutes ago
X       Pages  Pages     main    workflow_dispatch  36818018330  6s       about 6 minutes ago

Birinchi ustun — holat: * — ketyapti, ✓ — muvaffaqiyatli, X — xato. EVENT — runni nima boshlagan: push yoki qo'lda (workflow_dispatch). ID — run raqami, keyingi buyruqlar uchun kerak.

Pastki X — bizning sinovdagi haqiqiy xato: o'sha paytda akkauntda Actions vaqtincha to'xtatilgan edi. Bunday run'ning sababini gh run view ko'rsatadi.

6.3 gh run watch

bash
gh run watch 36818467242 --exit-status

watch holatni har 3 soniyada yangilaydi: qadamlar birin-ketin * dan ✓ ga o'tadi. Oxirgi ekran:

text
✓ main Pages · 36818467242
Triggered via workflow_dispatch less than a minute ago

JOBS
✓ deploy in 11s (ID 110228635689)
  ✓ Set up job
  ✓ Run actions/checkout@v7
  ✓ Run actions/configure-pages@v6
  ✓ Run actions/upload-pages-artifact@v5
  ✓ Run actions/deploy-pages@v5
  ✓ Post Run actions/checkout@v7
  ✓ Complete job

ANNOTATIONS
- "The ubuntu-latest label will migrate to Ubuntu 26 beginning October 19, 2026. For more information, see https://github.com/actions/runner-images/issues/14748"
deploy: .github#1


✓ Run Pages (36818467242) completed with 'success'

deploy — pages.yml dagi ishning (job) nomi, ostida uning qadamlari. --exit-status — run xato bilan tugasa, gh ham xato kodi bilan chiqadi (Exit code darsi). Skriptda foydali: gh run watch ... --exit-status && echo tayyor.

ANNOTATIONS — GitHub'ning eslatmasi: ubuntu-latest belgisi 2026-yil 19-oktabrdan Ubuntu 26 ga o'tadi. Xato emas, ma'lumot.

6.4 gh run view va loglar

bash
gh run view 36818467242 --log

Bu — run'ning to'liq jurnali (log), har qatori ish, qadam va vaqt bilan. U uzun — bizda 250 qatordan ortiq. Eng muhim qatorlari (qisqartirilgan):

text
deploy	Run actions/upload-pages-artifact@v5	2026-10-01T05:10:00.4592009Z Artifact github-pages has been successfully uploaded! Final size is 1213 bytes. Artifact ID is 11142780849
deploy	Run actions/deploy-pages@v5	2026-10-01T05:10:06.6641029Z Reported success!
deploy	Complete job	2026-10-01T05:10:06.9317386Z Evaluated environment url: https://login.github.io/

sayt/ papkasi arxivlanib yuklandi (1213 bayt — sinovdagi kichik sayt), joylash muvaffaqiyatli, oxirida — sayt manzili. Xato bo'lganda faqat qizil qadamlar logi kerak: gh run view <ID> --log-failed. Xatodan keyin qayta ishga tushirish — gh run rerun <ID>, faqat yiqilgan ishlarni — gh run rerun <ID> --failed (gh run rerun --help dan).

7. gh api: hamma narsaga kalit

7.1 Nega kerak

gh da yuzlab buyruq bor, lekin GitHub'ning hamma imkoniyati uchun emas. Masalan, ruleset uchun alohida gh ruleset create yo'q. Buning uchun gh api bor.

API (Application Programming Interface — dasturiy interfeys) — dasturlar bir-biri bilan gaplashadigan "eshik". GitHub saytidagi har tugma aslida GitHub API'siga so'rov yuboradi. gh api shu so'rovni siz uchun yuboradi: manzil yozasiz, javob JSON bo'lib qaytadi. Kirish tokeni o'zi qo'shiladi.

Bu HTTP metodlari darsidagi so'rovlarning o'zi. GET — o'qish (standart), POST — yaratish, PUT — almashtirish, DELETE — o'chirish.

7.2 O'qish va --jq

Kim bo'lib kirganman?

bash
gh api user --jq .login
text
login

--jq — javobdan kerakli qismni ajratish. .login — "JSON ichidagi login maydoni". Usiz user javobi o'nlab maydonli katta JSON bo'lardi.

Repo haqida:

bash
gh api "repos/{owner}/{repo}" \
  --jq '.full_name, .visibility, .default_branch'
text
login/login.github.io
public
main

{owner} va {repo} — gh ning maxsus belgilari: joriy papkadagi repodan o'zi qo'yadi. Qo'shtirnoq Git Bash'da {} buzilmasligi uchun.

Rulesetlar ro'yxati:

bash
gh api "repos/{owner}/{repo}/rulesets" \
  --jq '.[] | .name + " — " + .enforcement'
text
main himoyasi — active

.[] — "massivning har elementi", | — natijani keyingi qadamga uzatish (pipe kabi), + — matnlarni ulash. jq tili katta, lekin shu uchta belgi ko'p ishga yetadi.

Qaysi qoidalar main ga ishlayapti?

bash
gh api "repos/{owner}/{repo}/rules/branches/main" --jq '.[].type'
text
deletion
non_fast_forward
required_linear_history
pull_request

Oldingi darsdagi to'rtta qoida.

7.3 Yozish: rulesetni terminaldan yaratish

Oldingi darsda rulesetning JSON shaklini ko'rgan edik va "uni terminaldan ham yaratamiz" degan edik. Shu JSON'ni ruleset.json fayliga saqlang va:

bash
gh api --method POST "repos/{owner}/{repo}/rulesets" \
  --input ruleset.json --jq '{id, name, enforcement, source_type}'
text
{
  "enforcement": "active",
  "id": 24289032,
  "name": "main himoyasi",
  "source_type": "Repository"
}
  • --method POST — yangi narsa yaratish.
  • --input ruleset.json — so'rov tanasi shu fayldan.
  • --jq '{...}' — javobdan faqat to'rt maydon. source_type: Repository — ruleset shu reponing o'ziniki (tashkilotniki emas).

Ruleset yaratildi, uning raqami (id) bor. O'zgartirish — --method PUT ".../rulesets/24289032", o'chirish — --method DELETE. Bir xil faylni landing papkasida ham ishga tushirsangiz — ikkinchi repo ham himoyalanadi. Brauzerdagi o'nta bosish o'rniga — bitta buyruq.

Diqqat: gh api qudratli va to'g'ridan-to'g'ri ishlaydi: "Ishonchingiz komilmi?" degan savol yo'q. DELETE so'rovi bilan repo ham, ruleset ham bir zumda o'chadi. Yozuvchi so'rovni yuborishdan oldin manzilni ikki marta o'qing.

8. Ko'p uchraydigan xatolar

8.1 gh: command not found

O'rnatgandan keyin eski terminal oynasi PATH'ning eski holatini eslaydi. Yangi oyna oching.

8.2 Repodan tashqarida

bash
cd ~
gh pr list
text
failed to run git: fatal: not a git repository (or any of the parent directories): .git

gh joriy repoga git orqali qaraydi. Repo papkasiga o'ting yoki repo nomini ayting: gh pr list -R login/login.github.io.

8.3 "No commits between main and ..."

text
pull request create failed: GraphQL: No commits between main and feature/aloqa-telegram (createPullRequest)

Tarjimasi: "main va branch orasida commit yo'q". Branch'da yangi commit yo'q — u main bilan bir joyda. Ko'p sabab: commit qilishni unutgansiz yoki o'zgarish boshqa branch'da qolgan. git log --oneline main..HEAD bo'sh chiqsa — aynan shu.

8.4 "no pull requests found for branch"

text
no pull requests found for branch "feature/aloqa-telegram"

Joriy branch uchun PR hali ochilmagan (yoki boshqa branch'dasiz). PR raqamini aniq yozing: gh pr view 6.

8.5 Repo nomini adashtirish

gh repo'ni origin dan oladi. Fork qilingan repoda upstream ham bo'lsa, gh birinchi marta qaysi biri bilan ishlashni so'raydi. Xato tanlangan bo'lsa: gh repo set-default bilan qayta tanlang.

9. Mashqlar

Javoblarni mashqlar reposida 07/34-gh/javoblar.md ga yozib, 07/34: gh mashqlari javoblarini qo'sh bilan commit qiling.

1-mashq (oson): Qaysi dastur?

Har ish uchun git yoki gh ni tanlang:

  1. Branch yaratish.
  2. PR ochish.
  3. Issue'ni yopish.
  4. Commitlarni GitHub'ga yuborish.
  5. Hamkasbning PR'ini o'z kompyuteringizda ochish.
Yechim
  1. git (git switch -c). 2. gh (gh pr create). 3. gh (gh issue close). 4. git (git push). 5. gh (gh pr checkout) — u ichida git fetch va git switch ni chaqiradi.

Qoida: tarix bilan ishlash — git, GitHub saytidagi narsalar — gh.

2-mashq (o'rta): Bo'sh joylarni to'ldiring

Malika feature/menyu-manti branchida ishlayapti va issue #12 ni bajardi. PR ochib, uni squash bilan qo'shmoqchi:

bash
git push -u origin feature/menyu-manti
gh pr  --title "Menyu: manti narxini qo'sh" \
  --body " #12"
gh pr  -- --delete-branch

Ishora: «Pull Request terminaldan» bo'limidagi buyruqlar va kalit so'z.

Yechim

create, Closes, merge, squash. Closes #12 — PR merge bo'lganda issue #12 ni yopadi. --delete-branch — merge'dan keyin branchni ikkala joyda o'chiradi va main ga o'tkazadi.

3-mashq (qiyin): Malika nimani ko'radi?

Malika o'z kompyuterida (nusxa papkasida) main da turibdi. Siz PR #6 ni gh pr merge 6 --squash --delete-branch bilan qo'shdingiz. Malika:

bash
git branch
git log --oneline -1
  1. Malikada feature/loyihalar-bahor branchi bormi?
  2. Uning main i yangi commitni ko'rsatadimi?
  3. U nima qilishi kerak?

Ishora: gh pr merge faqat siz turgan papkadagi lokal repo'ni yangiladi («gh pr merge» bo'limidagi to'rt ish).

Yechim
  1. Ha, agar u gh pr checkout 6 qilgan bo'lsa. --delete-branch faqat sizning lokal branchingizni va GitHub'dagi branchni o'chiradi — Malikaning kompyuteriga tegolmaydi.
  2. Yo'q. Uning main i a2a3d58 da qoladi — u hali fetch qilmagan.
  3. To'rt buyruq:
bash
git switch main
git pull
git branch -D feature/loyihalar-bahor
git fetch --prune

-D — chunki squash commit uning branchidagi 3437065 emas (Branch himoyasi darsidagi -d ogohlantirishi). git fetch --prune — GitHub'da o'chirilgan branchlarning lokal xotiradagi nusxasini (origin/feature/...) tozalaydi.

4-mashq: Portfolio qadami — issue'dan merge'gacha terminalda

Portfolio'ning "Men haqimda" sahifasiga bitta yangi paragraf qo'shing — butun sikl gh bilan.

  1. gh auth status — kirganmisiz?
  2. gh issue create — sarlavha: Haqimda: o'qiyotgan kursim haqida yoz.
  3. feature/haqimda-kurs branchi, o'zgarish, npm run check, commit (Haqimda: kurs haqida paragraf qo'sh), push.
  4. gh pr create — matnida Closes #N (N — issue raqami).
  5. gh pr view va gh pr checks — nima deydi?
  6. gh pr merge --squash --delete-branch.
  7. gh issue view N — Closed mi?
Yechim
bash
gh auth status
gh issue create --title "Haqimda: o'qiyotgan kursim haqida yoz" \
  --body "Men haqimda sahifasida kurs haqida paragraf yo'q."
git switch -c feature/haqimda-kurs
# sayt/haqimda/index.html ga paragraf qo'shing
npm run check
git commit -am "Haqimda: kurs haqida paragraf qo'sh"
git push -u origin feature/haqimda-kurs
gh pr create --fill --body "Closes #7"
gh pr view
gh pr checks
gh pr merge --squash --delete-branch
gh issue view 7

#7 o'rniga gh issue create bergan raqamni yozing. gh pr checks hozircha no checks reported deydi — avtomatik tekshiruv keyingi darsda qo'shiladi. Shuning uchun 3-qadamdagi npm run check ni qo'lda ishga tushiring. Oxirida git log --oneline -1 da ... (#8) ko'rinishidagi squash commit turadi.

--fill bilan --body birga: sarlavha commit xabaridan olinadi, matn esa siz yozgan.

10. Real ishda

  • Ko'p dasturchi kuni gh pr status bilan boshlanadi: kimdir review kutyaptimi, mening PR'im qayerda.
  • Review jarayoni: gh pr checkout + lokal sinov + gh pr review — ko'p jamoalarda standart yo'l.
  • Skriptlar va avtomatika: gh va gh api GitHub Actions ichida ham ishlaydi (GH_TOKEN bilan). Reliz yaratish, issue'ga belgi qo'yish, PR'ga izoh yozish — hammasi skript bilan.
  • AI yordamchilari ham GitHub bilan ko'pincha aynan gh orqali ishlaydi: PR ochadi, CI natijasini o'qiydi.
  • Intervyuda kamdan-kam so'raladi, lekin birinchi ish haftangizda albatta kerak bo'ladi.

Xulosa

  • git — tarix, gh — GitHub saytidagi narsalar: issue, PR, workflow, repo.
  • gh auth login — bir marta, brauzer orqali; token tizim xotirasida, gh auth status bilan tekshiriladi.
  • Asosiy sikl: gh issue create → branch va push → gh pr create → gh pr checkout (review) → gh pr merge --squash --delete-branch.
  • gh ham rulesetga bo'ysunadi: base branch policy prohibits the merge; o'z PR'ingizni tasdiqlab bo'lmaydi.
  • gh api — qolgan hamma narsa uchun: --jq bilan javobni filtrlash, --method va --input bilan yaratish.

Keyingi dars: GitHub Actions: birinchi CI workflow — har push va PR'da npm run check avtomatik ishlaydigan qilamiz va uni rulesetga majburiy tekshiruv qilib qo'shamiz.

Manbalar

  • GitHub CLI qo'llanmasi: cli.github.com/manual — gh auth login, gh pr create, gh pr merge, gh api
  • GitHub CLI: "Installing gh on Windows" — github.com/cli/cli (docs/install_windows.md)
  • GitHub Docs: "About GitHub CLI", "REST API endpoints for rules" — docs.github.com
Ulashish:Telegram'da

Izohlar (0)

Izoh yozish uchun kiring.

  • Hozircha izoh yo'q. Birinchi bo'ling!
GitHub CLI (gh): PR, issue va repolarni terminaldan boshqarish — IlmHamroh