Mundarija (30)
- Bu darsda
- 1. Nega bu kerak?
- 2. Tayyorgarlik: «Bahor» papkasi
- 3. git init — repo yaratish
- 3.1 Birinchi buyruq
- 3.2 .git ichida nima paydo bo'ldi?
- 3.3 Qayta git init — xavfsiz
- 4. git status — hozir nima bor?
- 5. git add — commitga tanlash
- 5.1 Bitta fayl
- 5.2 Hammasini birdan: git add .
- 6. git commit — saqlash
- 6.1 Birinchi commit
- 6.2 -m siz commit
- 7. Ikkinchi aylanish
- 8. git commit -a — qisqa yo'l va uning tuzog'i
- 9. Bo'sh papkani Git ko'rmaydi
- 10. Ko'p uchraydigan xatolar
- 10.1 Fayl nomida xato: pathspec
- 10.2 "Commit qiladigan narsa yo'q"
- 10.3 Yangi fayl bor, lekin qo'shilmagan
- 10.4 Repo noto'g'ri papkada
- 11. Mashqlar
- 1-mashq (oson): To'g'ri tartib
- 2-mashq (o'rta): Bo'sh joylarni to'ldiring
- 3-mashq (qiyin): Stajyorning bir kuni
- 4-mashq: Portfolio qadami — portfolio Git'ga o'tadi
- 12. Real ishda
- Xulosa
- Manbalar
Birinchi Git repo: git init, git status, git add va git commit
Qisqacha: Papkani Git reposiga
git initaylantiradi — ichida yashirin.gitpapkasi paydo bo'ladi. Keyin ish sikli to'rt qadam: faylni o'zgartirasiz,git statusbilan ko'rasiz,git addbilan tanlaysiz vagit commit -m "xabar"bilan saqlaysiz.git commit -akuzatilayotgan fayllarni o'zi qo'shadi, lekin yangi fayllarni emas. Har qadamdan keyingit status— eng yaxshi odat.
Bu darsda
git initbilan papkani repo qilasiz va.gitichida nima paydo bo'lganini ko'rasiz.git statusvagit status -sbilan har qadamni kuzatasiz.git addvagit commit -mbilan birinchi commitlaringizni qilasiz va natijasini o'qiysiz.git commit -aqachon qulay va qachon tuzoq ekanini bilasiz.- Boshlovchilarning eng ko'p uchraydigan xatolarini — noto'g'ri papkadagi repo,
pathspec, bo'sh xabar — tanib, tuzatasiz.
Oldin bilishingiz kerak: Uch hudud, Git'ni o'rnatish va birinchi sozlash, Fayl va papkalar bilan ishlash.
1. Nega bu kerak?
Oldingi darsda uch hududni tanidik va git status natijalarini o'qishni o'rgandik. Lekin repo biz tayyorlagan edi. Bugun o'zingiz yaratasiz — boshidan oxirigacha.
Git'dagi kundalik ish to'rt qadamli sikl:
- O'zgartirasiz — VS Code'da faylni tahrirlaysiz.
- Ko'rasiz —
git status: nima o'zgardi? - Tanlaysiz —
git add: commitga nima tushadi? - Saqlaysiz —
git commit: tarixga yozish.
flowchart LR
A["1. O'zgartirish<br/>(VS Code)"] --> B["2. Ko'rish<br/>git status"]
B --> C["3. Tanlash<br/>git add"]
C --> D["4. Saqlash<br/>git commit"]
D --> ANimaga qarang: sikl yopiq — commitdan keyin yana tahrirlashga qaytasiz. Dasturchining bir kuni shu aylanani o'nlab marta bosib o'tadi.
Birinchi deploy darsida GitHub'da Commit changes tugmasini bosgan edingiz — o'shanda "commit — Git atamasi, Git qismida o'rganamiz" degan edik. Bugun o'sha tugmaning ishini terminalda, o'z kompyuteringizda qilasiz. Dars oxirida esa portfolio'ingiz birinchi marta haqiqiy Git reposiga aylanadi.
2. Tayyorgarlik: «Bahor» papkasi
Mashq uchun «Bahor» saytining qisqa nusxasini yaratamiz. Git Bash'ni oching va kurs/ papkangizga o'ting. > — natijani faylga yozish, Oqimlar va yo'naltirish darsidan tanish:
cd ~/kurs
mkdir bahor
cd bahor
mkdir -p menyu bron assets/css
echo '<h1>Bahor choyxonasi</h1>' > index.html
echo '<h1>Menyu</h1>' > menyu/index.html
echo '<h1>Stol band qilish</h1>' > bron/index.html
echo 'body { font-family: sans-serif; }' > assets/css/asosiy.cssFayllarni VS Code'da qo'lda yaratsangiz ham bo'ladi — Git uchun farqi yo'q. Muhimi — tuzilma bir xil bo'lsin: bosh sahifa, menyu, bron va bitta CSS fayl.
Bu papka hali oddiy papka. Tekshiramiz:
git statusfatal: not a git repository (or any of the parent directories): .gitBu xabarni Versiya nazorati darsida tahlil qilgan edik: Git .git papkasini na shu yerda, na yuqorida topdi. Agar sizda boshqa xabar chiqsa (masalan On branch main), to'xtang va «Ko'p uchraydigan xatolar» bo'limidagi "Repo noto'g'ri papkada" holatini o'qing.
3. git init — repo yaratish
3.1 Birinchi buyruq
git initInitialized empty Git repository in C:/Users/.../kurs/bahor/.git/Tarjimasi: "Bo'sh Git repozitoriysi shu joyda yaratildi: ...". Yo'lning o'rtasini ... bilan qisqartirdik: biz sinovni vaqtinchalik papkada o'tkazdik. Sizda to'liq yo'l chiqadi, masalan C:/Users/Aziz/kurs/bahor/.git/. Yo'lga albatta qarang: repo aynan siz kutgan papkada yaratildimi?
hint: bilan boshlanadigan uzun maslahat chiqmadi — chunki oldingi darsda init.defaultBranch main ni sozlagansiz. Chiqsa — o'sha darsning standart branch haqidagi bo'limiga qayting.
3.2 .git ichida nima paydo bo'ldi?
ls -a.
..
.git
assets
bron
index.html
menyuYangi narsa bitta — .git. Fayllaringizga Git tegmadi. Ichiga qaraymiz:
ls .gitHEAD
config
description
hooks
info
objects
refsQisqacha, har biri nima:
| Nom | Nima |
|---|---|
HEAD |
"Hozir qaysi branch'dasiz" — HEAD va refs |
config |
Local sozlamalar — oldingi darsda ko'rgansiz |
objects |
Fayllar va commitlar saqlanadigan joy — Git ichkaridan |
refs |
Branch va tag ko'rsatkichlari — Branch nima |
hooks — commitdan oldin avtomatik ishlaydigan skriptlar uchun joy (Husky va lint-staged darsida kerak bo'ladi). description va info hozir ahamiyatsiz. Staging uchun index fayli esa hali yo'q — u birinchi git add da paydo bo'ladi.
Bu papkaga qo'l tegizmang — Uch hudud darsidagi ogohlantirishni eslang.
3.3 Qayta git init — xavfsiz
Adashib bir papkada ikkinchi marta git init yozsangiz nima bo'ladi? Tarixi bor «Bahor» reposida sinadik:
Reinitialized existing Git repository in C:/Users/.../kurs/bahor/.git/Tarjimasi: "Mavjud Git repozitoriysi qayta ishga tushirildi". Commitlar, tarix — hammasi joyida qoladi. Git faqat yetishmayotgan xizmat fayllarini qo'shadi. Ya'ni bu xato emas, lekin kerak ham emas: har bir loyihada git init — bir marta.
4. git status — hozir nima bor?
git statusOn branch main
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
assets/
bron/
index.html
menyu/
nothing added to commit but untracked files present (use "git add" to track)Qatorma-qator:
On branch main— "mainbranch'dasiz".No commits yet— "hali birorta commit yo'q". Yangi repoda doim shunday.Untracked files— to'rtala element kuzatilmaydi. Papkalar ichidagi fayllar bilan birga butunligicha ko'rsatiladi (bron/,menyu/).- Oxirgi qator: "commitga hech narsa qo'shilmagan, lekin kuzatilmaydigan fayllar bor (kuzatish uchun
git addishlating)".
Git nima qilish kerakligini o'zi aytyapti. Keyingi qadam — git add.
5. git add — commitga tanlash
5.1 Bitta fayl
Avval faqat bosh sahifani qutiga solamiz:
git add index.htmlwarning: in the working copy of 'index.html', LF will be replaced by CRLF the next time Git touches itQo'rqmang — bu xato emas, ogohlantirish (warning). Tarjimasi: "index.html ning ishchi nusxasida LF, Git keyingi safar unga tegganda, CRLF bilan almashtiriladi".
Tanish harflarmi? Qator oxiri darsida CRLF va LF ni o'rgangan edik. echo Git Bash'da qator oxiriga LF qo'yadi. Oldingi darsda system sozlamada core.autocrlf=true ni ko'rgan edik. Bu sozlama bilan Git repoga LF saqlaydi, Windows'dagi ishchi papkaga esa faylni CRLF bilan chiqaradi. Ogohlantirish shuni oldindan aytyapti. Fayl buzilmaydi.
Bu xabar Windows'da tez-tez chiqadi. macOS va Linux'da odatda chiqmaydi. Uni butunlay tartibga solishni — .gitattributes faylini — .gitattributes va qator oxirlari darsida o'rganamiz. Hozircha shunchaki e'tibor bermang.
Endi holatni ko'ramiz:
git statusOn branch main
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: index.html
Untracked files:
(use "git add <file>..." to include in what will be committed)
assets/
bron/
menyu/
index.html Changes to be committed bo'limiga o'tdi — new file belgisi bilan. Birinchi commitgacha "qutidan olish" maslahati boshqacha: git rm --cached. Qolgan uchtasi hali untracked.
Qisqa formatda:
git status -sA index.html
?? assets/
?? bron/
?? menyu/A chap ustunda — "added", staging'ga yangi qo'shilgan fayl. ?? — untracked. Ustunlarning ma'nosi Uch hudud darsidagi jadvalda.
5.2 Hammasini birdan: git add .
Qolganlarini bitta-bitta yozish shart emas. Nuqta — "joriy papka va uning ichidagi hamma narsa":
git add .warning: in the working copy of 'assets/css/asosiy.css', LF will be replaced by CRLF the next time Git touches it
warning: in the working copy of 'bron/index.html', LF will be replaced by CRLF the next time Git touches it
warning: in the working copy of 'menyu/index.html', LF will be replaced by CRLF the next time Git touches itHar yangi fayl uchun o'sha CRLF ogohlantirishi. Endi:
git status -sA assets/css/asosiy.css
A bron/index.html
A index.html
A menyu/index.htmlTo'rttala fayl qutida. git status endi papkalarni emas, har bir faylni alohida ko'rsatadi — chunki ular endi Git'ga tanish.
git add ning boshqa shakllari:
| Buyruq | Nimani qo'shadi |
|---|---|
git add index.html |
Bitta faylni |
git add index.html bron/index.html |
Bir nechta faylni |
git add menyu |
Papkani ichidagilari bilan |
git add . |
Joriy papkadagi hamma narsani |
Diqqat:
git add .qulay, lekin ko'r-ko'rona ishlatmang. U papkadagi hamma narsani qutiga soladi — parollar yozilgan.envfaylini ham, minglab fayli bornode_modules/ni ham. Odat:git add .dan keyin darholgit status -sga qarang. Keraksiz fayllarni oldindan chetlab o'tishni portfolio mashqida ko'rasiz.
Tekshirib ko'ring:
git add .nibahor/menyupapkasi ichida turib yozsangiz,bahor/index.htmlqutiga tushadimi?
Javob
Yo'q. Nuqta — joriy papka, ya'ni menyu/ va uning ichidagilar. Bosh sahifa undan yuqorida. Butun loyihani qo'shish uchun repo ildiziga qayting (cd ..) yoki fayl yo'lini aniq yozing.
6. git commit — saqlash
6.1 Birinchi commit
git commit -m "Bahor: sayt tuzilmasini yarat"[main (root-commit) dab5bff] Bahor: sayt tuzilmasini yarat
4 files changed, 4 insertions(+)
create mode 100644 assets/css/asosiy.css
create mode 100644 bron/index.html
create mode 100644 index.html
create mode 100644 menyu/index.html-m — "message", commit xabari. U qo'shtirnoq ichida, chunki bo'sh joy bor. Natijani bo'laklaymiz:
main— commit qaysi branch'ga yozildi.(root-commit)— "ildiz commit": tarixdagi birinchi commit, undan oldin hech narsa yo'q. Bu yozuv faqat bir marta chiqadi.dab5bff— commitning qisqa nomi (SHA). Sizda boshqa bo'ladi: u mazmun, muallif va vaqtdan hisoblanadi. Biz sanani ataylab bir xil qilib qo'ydik, shuning uchun kursdagi barcha misollarda bir xil chiqadi.4 files changed, 4 insertions(+)— to'rt fayl, jami to'rt qator qo'shildi.create mode 100644— yangi fayl yaratildi.100644— "oddiy fayl" belgisi (ishga tushiriladigan skript bo'lsa100755bo'lardi). Bu raqamlarni Git ichkaridan darsida ochamiz.
Commitdan keyin:
git statusOn branch main
nothing to commit, working tree cleanUchala hudud bir xil. Tarixga qaraymiz:
git log --onelinedab5bff (HEAD -> main) Bahor: sayt tuzilmasini yaratBirinchi yozuv! Qavs ichidagi (HEAD -> main) — "siz hozir shu commitdasiz, main branch shu yerda" degan belgi. U doim eng oxirgi commit yonida turadi; batafsil — HEAD va refs darsida. git log ni to'liq Tarixni o'qish darsida o'rganamiz.
6.2 -m siz commit
git commit ni -m siz yozsangiz, Git xabar yozish uchun muharrir ochadi. Qaysi muharrir — core.editor belgilaydi: Vim darsida VS Code (code --wait) sozlangan edi. Birinchi qatorga xabar yozasiz, faylni saqlab, tabni yopasiz — commit tayyor.
Xabarni bo'sh qoldirib yopsangiz:
Aborting commit due to empty commit message.Tarjimasi: "Xabar bo'sh bo'lgani uchun commit bekor qilindi". Hech narsa yo'qolmadi: fayllar qutida kutib turibdi. Qaytadan git commit yozing.
Uzun, bir necha qatorli xabarlar uchun muharrir qulayroq.
Xabarning o'zi nima qilinganini aytsin. "o'zgarish", "fix", "asdf" — tarixda hech narsa demaydi. Kursda xabarlarni bitta shaklda yozamiz:
- avval soha — o'zgarish qayerda:
Bahor,Menyu,Bron; - keyin ikki nuqta va buyruq shaklidagi fe'l bilan nima qilish kerakligi:
sayt tuzilmasini yarat,osh narxini qo'sh.
Birinchi commitimiz shunday edi: Bahor: sayt tuzilmasini yarat. Nega aynan buyruq shakli va xabar qancha uzun bo'lishi — Yaxshi commit darsida.
Tekshirib ko'ring: Nega birinchi commitda
(root-commit)yozuvi chiqdi, keyingilarida esa chiqmaydi?
Javob
Birinchi commitning "ota" commiti yo'q — tarix undan boshlanadi. Keyingi har commit o'zidan oldingisiga bog'lanadi. Git faqat ota commiti bo'lmagan commitni "ildiz" deb belgilaydi.
7. Ikkinchi aylanish
Siklni yana bir marta, to'liq aylanamiz. Jasur aka menyuga osh narxini qo'shishni so'radi.
1. O'zgartiramiz. >> — fayl oxiriga qo'shish:
echo "<p>Osh — 35 000 so'm</p>" >> menyu/index.html2. Ko'ramiz:
git statusOn branch main
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: menyu/index.html
no changes added to commit (use "git add" and/or "git commit -a")modified — fayl tanish, o'zgargan, lekin qutida emas. Qisqa formatda M menyu/index.html.
Agar shu yerda add ni unutib, darhol commit qilsak-chi?
git commit -m "Menyu: osh narxini qo'sh"On branch main
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: menyu/index.html
no changes added to commit (use "git add" and/or "git commit -a")Commit bo'lmadi. Git git status ni ko'rsatdi va oxirgi qatorda sababini aytdi: "commitga hech narsa qo'shilmagan". Quti bo'sh — muhrlaydigan narsa yo'q.
3. Tanlaymiz va 4. saqlaymiz:
git add menyu/index.html
git commit -m "Menyu: osh narxini qo'sh"[main f4238e7] Menyu: osh narxini qo'sh
1 file changed, 1 insertion(+)Endi root-commit yo'q, create mode ham yo'q — fayl oldindan bor edi, faqat bitta qator qo'shildi. Tarix o'smoqda:
gitGraph
commit id: "dab5bff tuzilma"
commit id: "f4238e7 osh narxi"Nimaga qarang: yangi commit oldingisining davomiga qo'shildi. main branch esa har doim eng oxirgi commitni ko'rsatib turadi — yangi commit qo'shilganda u ham oldinga suriladi.
8. git commit -a — qisqa yo'l va uning tuzog'i
Har safar git add yozish zerikarli tuyulishi mumkin. -a (all) flagi commitdan oldin kuzatilayotgan fayllarning barcha o'zgarishlarini o'zi qutiga soladi.
Sinaymiz. Yangi aloqa sahifasini yaratamiz va bosh sahifaga unga havola qo'shamiz:
mkdir aloqa
echo '<h1>Aloqa</h1>' > aloqa/index.html
echo '<a href="aloqa/">Aloqa</a>' >> index.html
git status -s M index.html
?? aloqa/Endi -a bilan:
git commit -a -m "Bosh sahifa: aloqa havolasini qo'sh"warning: in the working copy of 'index.html', LF will be replaced by CRLF the next time Git touches it
[main 9084599] Bosh sahifa: aloqa havolasini qo'sh
1 file changed, 1 insertion(+)1 file changed — faqat bitta! Holatni tekshiramiz:
git status -s?? aloqa/Aloqa sahifasi commitga tushmadi. -a faqat Git tanigan fayllarni qo'shadi — yangi (untracked) fayllarga tegmaydi. Havola commitda bor, sahifaning o'zi esa yo'q. Kimdir shu commitni olsa, havola bosilganda sahifa topilmaydi.
Yangi faylni har doim bir marta qo'lda add qilish kerak:
git add aloqa
git commit -m "Aloqa: sahifa yarat"
git log --oneline[main b09fa2a] Aloqa: sahifa yarat
1 file changed, 1 insertion(+)
create mode 100644 aloqa/index.html
b09fa2a (HEAD -> main) Aloqa: sahifa yarat
9084599 Bosh sahifa: aloqa havolasini qo'sh
f4238e7 Menyu: osh narxini qo'sh
dab5bff Bahor: sayt tuzilmasini yarat(git add aloqa ham CRLF ogohlantirishini chiqardi — uni qisqartirish uchun tashlab ketdik.) To'rt commit — Versiya nazorati darsida ko'rgan tarixning aynan o'zi. Endi uni o'zingiz yaratdingiz.
Xulosa: -a — faqat hamma o'zgarish bitta mantiqiy ish ekaniga va yangi fayl yo'qligiga ishonchingiz komil bo'lganda. Boshida git add + git status + git commit yo'li xavfsizroq.
Tekshirib ko'ring:
git status -snatijasiM style.cssva?? logo.svg.git commit -a -m "Bosh sahifa: logo qo'sh"dan keyin qaysi fayl commitda bo'ladi?
Javob
Faqat style.css. U tracked — -a uni o'zi qo'shadi. logo.svg untracked — -a unga tegmaydi va u commitdan keyin ham ?? bo'lib qoladi. Xabar "logo qo'sh" desa-da, logoning o'zi commitda yo'q.
9. Bo'sh papkani Git ko'rmaydi
«Bahor» uchun rasmlar papkasini oldindan yaratib qo'ydik:
mkdir -p assets/images
git statusOn branch main
nothing to commit, working tree cleanPapka bor, lekin Git "hamma narsa toza" deydi. Sababi: Git fayllarni kuzatadi, papkalarni emas. Papka faqat ichidagi fayl orqali tarixga tushadi. Bo'sh papka commitda bo'lmaydi va boshqa kompyuterga ham yetib bormaydi.
Bo'sh papkani saqlash kerak bo'lsa, dasturchilar ichiga bo'sh .gitkeep fayl qo'yadi:
touch assets/images/.gitkeep
git status -s?? assets/images/Endi papka ko'rindi. .gitkeep — Git'ning maxsus fayli emas, shunchaki kelishilgan nom. Istalgan nom ishlayveradi, lekin hamma shuni ishlatadi.
10. Ko'p uchraydigan xatolar
10.1 Fayl nomida xato: pathspec
git add menu/index.htmlfatal: pathspec 'menu/index.html' did not match any filesTarjimasi: "halokatli xato: menu/index.html yo'l shabloni hech qanday faylga mos kelmadi". Pathspec — Git'ning "fayl yo'li yoki shabloni" degan so'zi. Git bunday faylni topmadi, chunki papka menyu, menu emas. Tuzatish: nomni tekshiring. Eng yaxshisi — birinchi harflarni yozib Tab bosing (Terminalda harakatlanish): shell nomni o'zi to'ldiradi va xato qilmaysiz.
10.2 "Commit qiladigan narsa yo'q"
On branch main
nothing to commit, working tree cleanXato emas — hamma narsa allaqachon saqlangan. Agar "o'zgartirgan edim-ku" desangiz, tekshiring: faylni saqladingizmi (Ctrl + S)? To'g'ri papkadamisiz? VS Code'dagi o'zgarish diskka yozilmaguncha Git uni ko'rmaydi.
10.3 Yangi fayl bor, lekin qo'shilmagan
git commit -m "Sinov: vaqtinchalik faylni qo'sh"On branch main
Untracked files:
(use "git add <file>..." to include in what will be committed)
vaqtinchalik.txt
nothing added to commit but untracked files present (use "git add" to track)Tarjimasi (oxirgi qator): "commitga hech narsa qo'shilmagan, lekin kuzatilmaydigan fayllar bor". Commit bo'lmadi. Tuzatish: avval git add.
10.4 Repo noto'g'ri papkada
Eng xavfli xato. Aziz bahor/ o'rniga bir qavat yuqorida — kurs/ da git init yozib yubordi. Endi kurs/ ichidagi hamma narsa — portfolio, landing, mashqlar — bitta repoga tushadi. bahor/ ning o'z .git i bo'lgani uchun Git yana ogohlantiradi:
cd ~/kurs
git init
git add .warning: adding embedded git repository: bahor
hint: You've added another git repository inside your current repository.
hint: Clones of the outer repository will not contain the contents of
hint: the embedded repository and will not know how to obtain it.
...Tarjimasi: "ogohlantirish: ichki git repozitoriysi qo'shilmoqda: bahor. Siz joriy repozitoriyingiz ichiga boshqa git reposini qo'shdingiz. Tashqi reponing nusxalarida ichkisining mazmuni bo'lmaydi". Pastki hint qatorlarini ... bilan qisqartirdik. Ya'ni tashqi repo bahor/ ni bitta "havola" deb saqlaydi, ichidagi fayllarni emas.
Qaysi papka repo ekanini qanday bilish mumkin? Shu buyruq repo ildizini aytadi:
git rev-parse --show-toplevelC:/Users/.../kurs/bahorUni bahor/menyu ichida yozsak ham, javob bir xil — Git yuqoriga qarab eng yaqin .git ni topadi. Kutilmagan papka chiqsa (masalan C:/Users/Aziz yoki .../kurs), demak repo noto'g'ri joyda.
Tuzatish: noto'g'ri joyda hozirgina yaratilgan, tarixi yo'q repodan faqat .git papkasini o'chirish kifoya: rm -rf .git — aynan o'sha papkada turib. Fayllaringizga tegmaydi. Lekin rm -rf qaytarib bo'lmaydigan buyruq (Fayl va papkalar bilan ishlash). Oldin pwd va git rev-parse --show-toplevel bilan qayerda turganingizni ikki marta tekshiring. Ichida commitlar bor repo bo'lsa — hech narsani o'chirmang, avval yordam so'rang.
Diqqat: Uy papkangizda (
~)git initqilmang. Shunda kompyuterdagi deyarli hamma narsa bitta repoga aylanadi, har qanday papkadagit statusminglab faylni ko'rsatadi.
11. Mashqlar
1-mashq (oson): To'g'ri tartib
Aralashtirilgan buyruqlarni birinchi commit uchun to'g'ri tartibga soling:
git commit -m "Test: bosh sahifani qo'sh"
git init
git status
git add .
cd ~/kurs/testIshora: sikl — ko'rish, tanlash, saqlash; lekin undan oldin papkaga kirish va repo yaratish kerak.
Yechim
cd ~/kurs/test
git init
git status
git add .
git commit -m "Test: bosh sahifani qo'sh"git status ni git add . dan keyin yana bir marta yozish ham yaxshi odat — qutida nima borligini ko'rasiz.
2-mashq (o'rta): Bo'sh joylarni to'ldiring
«Bahor»ga bron sahifasi uchun "rahmat" sahifasi qo'shildi va menyuga lag'mon narxi yozildi. Ikkalasini alohida commit qiling.
echo '<h1>Rahmat!</h1>' > bron/rahmat.html
echo "<p>Lag'mon — 28 000 so'm</p>" >> menyu/index.html
git status -sgit status -s natijasida menyu oldida o'ng ustunda [:M] harfi, rahmat sahifasi oldida esa [:??] belgisi turadi. Keyin:
git bron/rahmat.html
git commit -m "Bron: rahmat sahifasini qo'sh"
git add menyu/index.html
git commit "Menyu: lag'mon narxini qo'sh"Ishora: yangi fayl uchun -a ishlamaydi («commit -a — qisqa yo'l va uning tuzog'i» bo'limi). -m — xabar flagi.
Yechim
git add bron/rahmat.html
git commit -m "Bron: rahmat sahifasini qo'sh"
git add menyu/index.html
git commit -m "Menyu: lag'mon narxini qo'sh"
git log --onelineBiz «Bahor» reposida sinadik. git status -s:
M menyu/index.html
?? bron/rahmat.htmlOxirgi git log --oneline:
07b061d (HEAD -> main) Menyu: lag'mon narxini qo'sh
bd98d1b Bron: rahmat sahifasini qo'sh
b09fa2a Aloqa: sahifa yarat
9084599 Bosh sahifa: aloqa havolasini qo'sh
f4238e7 Menyu: osh narxini qo'sh
dab5bff Bahor: sayt tuzilmasini yaratBirinchi add faqat rahmat sahifasini qutiga soladi — menyu stolda qoladi va birinchi commitga tushmaydi. Natijada ikki alohida, tushunarli commit.
3-mashq (qiyin): Stajyorning bir kuni
Stajyor Sardor yangi choyxona/ papkasida shunday ishladi:
cd ~/kurs/choyxona
git init
echo '<h1>Choyxona</h1>' > index.html
git commit -m "Boshlanish"
echo 'body { color: green; }' > style.css
git add index.html
git commit -a -m "Sahifa va stil"
git status -s- Uchinchi va oltinchi buyruqlardan keyin Git nima deydi (qaysi qator muhim)?
- Oxirgi
git status -snimani ko'rsatadi? style.cssni ham tarixga qo'shish uchun nima qilish kerak?
Ishora: «Ko'p uchraydigan xatolar» bo'limidagi "yangi fayl bor, lekin qo'shilmagan" holati va -a ning cheklovi.
Yechim
Biz aynan shu buyruqlarni ishga tushirdik.
git commit -m "Boshlanish"— commit bo'lmaydi:
On branch main
Initial commit
Untracked files:
(use "git add <file>..." to include in what will be committed)
index.html
nothing added to commit but untracked files present (use "git add" to track)Initial commit — "birinchi commit tayyorlanmoqda": yangi repoda hali commit yo'qligini bildiradi. index.html esa untracked edi. Oltinchi buyruq (git commit -a ...) ishlaydi, lekin commitga faqat index.html tushadi — u add qilingan:
[main (root-commit) 2bc2500] Sahifa va stil
1 file changed, 1 insertion(+)
create mode 100644 index.html(Oldidan CRLF ogohlantirishi ham chiqdi — uni tashlab ketdik.)
?? style.css—-ayangi faylga tegmadi.- Faylni qo'shib, alohida commit qilish:
git add style.css
git commit -m "CSS: matnni yashil qil"Commit xabari "Sahifa va stil" bo'lsa ham, stil unda yo'q edi. Xabar va mazmun mos kelmasligi — Yaxshi commit darsida bunday holatlardan qochishni o'rganamiz. Sardorning ikkala xabari kurs shakliga ham mos emas: na soha bor, na buyruq shaklidagi fe'l.
4-mashq: Portfolio qadami — portfolio Git'ga o'tadi
Bugundan boshlab portfolio'ingizning tarixi kompyuteringizda yoziladi. Hozircha faqat lokal repo qilamiz. GitHub'dagi login.github.io reposi — Birinchi deploy darsida brauzer orqali yuklangan — bilan bog'lash keyinroq, Remote: clone, fetch, pull, push darsida. U yerda ikki tarix — brauzerdagi va lokal — qanday birlashishini alohida yechamiz.
- Portfolio papkangizga o'ting va u hali repo emasligini tekshiring.
- Repo yarating. Yo'l to'g'rimi —
portfolio/.git/bilan tugaydimi? git status -sga qarang. Qaysi qator commitga tushmasligi kerak (Uch hudud darsining portfolio qadamini eslang)?- Loyiha ildizida bitta qatorli
.gitignorefayl yarating:node_modules/. Bu fayl Git'ga "shu papkaga qarama" deydi (Fayl qidirish darsida ko'rgansiz; to'liq qoidalari — .gitignore darsida). - Yana
git status -s—node_modules/yo'qoldimi? Keyin hammasini qo'shing va birinchi commitni qiling. Xabar:Portfolio: 06-qism oxiridagi holat. git statusvagit log --onelinebilan tekshiring.
Yechim
cd ~/kurs/portfolio
git status
git init
git status -s
echo 'node_modules/' > .gitignore
git status -s
git add .
git status -s
git commit -m "Portfolio: 06-qism oxiridagi holat"
git status
git log --onelineBiz 04-qism tuzilmasidagi qisqa portfolio'da sinadik. git init dan keyingi git status -s:
?? .htmlvalidate.json
?? .htmlvalidateignore
?? .prettierrc
?? .stylelintrc.json
?? asosiy-eski.css
?? node_modules/
?? package-lock.json
?? package.json
?? sayt/.gitignore dan keyin node_modules/ yo'qoladi, o'rniga ?? .gitignore paydo bo'ladi. Commit natijasining boshi:
[main (root-commit) 63190c1] Portfolio: 06-qism oxiridagi holat
16 files changed, 16 insertions(+)
create mode 100644 .gitignore
create mode 100644 .htmlvalidate.json
...Sizda fayllar va qatorlar soni ko'proq bo'ladi — haqiqiy sahifalaringiz uzunroq. SHA ham boshqa. Muhimi: node_modules ro'yxatda yo'q, git status esa nothing to commit, working tree clean deydi.
Ikki savolga javob:
package-lock.jsonni commit qilish kerakmi? Ha. Unpm installhamma kompyuterda aynan bir xil versiyalarni o'rnatishini ta'minlaydi.node_modules/esa undan qayta yaratiladi.asosiy-eski.cssnima bo'ladi? Endi eski versiyalar tarixda saqlanadi — bunday nusxa fayllar kerak emas. Uni o'chirib, alohida commit qilishni Yaxshi commit darsidagit rmbilan qilamiz.
landing/ papkangiz ham xuddi shunday repo bo'ladi — uni keyingi darslarning portfolio qadamlarida qilamiz. kurs/ ning o'zida esa git init qilmang (yuqoridagi "Repo noto'g'ri papkada" holati).
12. Real ishda
- Har bir yangi loyiha
git initbilan yoki mavjud reponigit cloneqilish bilan boshlanadi. Ba'zi vositalar (masalan Next.js'ning loyiha yaratuvchisi)git initni o'zi bajaradi — buni keyingi qismlarda ko'rasiz. - Kichik va tez-tez commit. Tajribali dasturchilar kuniga o'nlab commit qiladi. Har biri — bitta tugallangan qadam. Xato bo'lsa, oxirgi yaxshi holatga qaytish oson.
git status— refleks. Ko'p dasturchi terminal promptiga branch nomi va "o'zgargan fayllar bor" belgisini qo'yadi — status doim ko'z oldida bo'ladi.- Intervyuda amaliy savol beriladi: "Yangi papkadan birinchi commitgacha qaysi buyruqlarni yozasiz?", "
git commit -animani qo'shmaydi?" Bu dars ikkalasiga ham javob.
Xulosa
git initpapkani repo qiladi — ichida.gitpaydo bo'ladi; har loyihada bir marta, to'g'ri papkada.- Sikl: o'zgartirish →
git status→git add→git commit -m "xabar". git add .hamma narsani qo'shadi — undan keyin doimgit status -sga qarang.git commit -afaqat tracked fayllarni qo'shadi; yangi fayl har doim qo'ldaaddqilinadi.- Windows'dagi
LF will be replaced by CRLF— ogohlantirish, xato emas. - Bo'sh papka tarixga tushmaydi;
node_modules/ni.gitignorechetlab o'tadi.
Keyingi dars: Yaxshi commit: atomar commit va xabar yozish — bitta commitga nima sig'ishi kerakligini va tarixda o'qiladigan xabar yozishni o'rganamiz.
Manbalar
- Pro Git kitobi: "Getting a Git Repository" va "Recording Changes to the Repository" — git-scm.com/book
- Git hujjati: "git-init", "git-add", "git-commit", "git-status" — git-scm.com/docs
Izohlar (0)
Izoh yozish uchun kiring.
- Hozircha izoh yo'q. Birinchi bo'ling!