2025-09-15
Birinchi bo'lib git nima uchun kerak degan savolga javob bersak, Git bu projectlardagi kodlarni bir kod baseda versionlarga bo'lish, turli versiondagi kodlarni birlashtirish, qayta ishlash uchun ishlab chiqilgan vosita. Agar git bo'lmaganda versionlarni alohida papkalarda saqlashimiz kerak bo'lardi. Github esa shu kodlar saqlab turish hostingi halos, siz Githubsiz ham localda versionlar bilan ishlashiz mumkin.
Post asosiy tushunchalar bo'lganligi uchun, uni yuklab olish, sozlash qismlarini o'tkazib yuboramiz.
Birinchi bo'lib git bilan ishlamoqchi bo'lgan kod papkamizda git init
qilishimiz kerak, shunda biz gitdagi history, loglar va boshqa git
xususiyatlarini ishlatishimiz mumkin.
$ git init
Initialized empty Git repository in /Users/neo/Desktop/l_git/.git/
bor o'zgarishlarni commitga qo'shish:
$ git add .
git add
- bu qo'shish.
- o'zgartirilgan hamma o'zgarishni qo'shishgit add home.html
- faqat o'zgarganni o'zini qo'shisho'zgarishlarni nomlab guruhlash:
$ git commit -m "o'zgarishlar nima haqidaligi"
git commit
- commit qilish-m
- message flag, undan keyin "" ichida commit uchun nombog'lamoqchi bo'lgan remote repository linki:
$ git remote add origin https://github.com/username/myproject.git
git remote
- localni remote bilan boshlashadd origin
- origin nomi bilan remote qo'shyapmiz, uni linki remote
repository link
tanlangan branchga push qilish:
$ git push -u origin main
git push
- remote serverga yuklash-u
- ushbu branchni remote dagi shunga nomlangan branch bilan bog‘lab qo‘yorigin main
- remotedagi origindagi main
branchga yukla, odatda main
yoki master
bo'ladi, asosiy branchShunday qilib birinchi remote repoga bog'landik, GH misolida
Yangi branch ochish, unga o'tish va uni masofaviy repoga jo'natish:
$ git branch feature/auth
$ git switch feature/auth # yoki: git checkout feature/auth
$ git switch -c fix/login # yaratish + o'tish
$ git branch # hamma branchlar ro'yxati
$ git branch -a # remote branchlar bilan
$ git push -u origin feature/auth # yangi branchni remote'ga yuborish
$ git branch -d fix/login # merge qilingandan so'ng o'chirish (local)
$ git push origin --delete fix/login # remote branchni o'chirish
Commit qilish tartibi va foydali flaglar:
$ git add .
$ git commit -m "login sahifasida xatoliklarni ko'rsatish"
# Oxirgi commit message'ini tuzatish (o'zgarish bo'lmasa ham mumkin)
$ git commit --amend -m "login: xatoliklarni ko'rsatish va validator"
# Staged'ni bekor qilish
$ git restore --staged src/pages/login.tsx
# Ishchi faylni oxirgi commit holatiga qaytarish (DIQQAT: o'zgarish yo'qoladi)
$ git restore src/pages/login.tsx
# Faqat tanlangan faylni add qilish
$ git add src/pages/login.tsx
scope: nima qildingiz
--no-verify
bilan hook'lardan vaqtincha o'tib ketish mumkin.Tarixni ko'rish va tahlil qilish usullari:
$ git log # to'liq log
$ git log --oneline --graph --decorate --all
$ git show HEAD # oxirgi commit tafsiloti
$ git show <commit_sha> # ma'lum commit tafsiloti
$ git blame src/app.ts # fayl satrlari bo'yicha kim/qaçon
$ git diff # staged bo'lmagan farqlar
$ git diff --staged # staged farqlar
$ git reflog # HEAD harakatlari tarixi (qutqaruvchi)
Asosiy ikki yo'l bor: merge
va rebase
.
# merge: tarixga "merge commit" qo'shadi
$ git switch main
$ git pull --ff-only
$ git merge feature/auth
# rebase: feature tarixini main ustiga yozib chiqadi (toza tarix)
$ git switch feature/auth
$ git fetch origin
$ git rebase origin/main
# konflikt bo'lsa tuzating, so'ng davom eting
$ git rebase --continue
# Agar rebase yoki merge paytida bekor qilish kerak bo'lsa
$ git rebase --abort
$ git merge --abort
# Cherry-pick jarayonini ham to'xtatish mumkin
$ git cherry-pick --abort
# yakunda main'ga qo'shish
$ git switch main
$ git merge --ff-only feature/auth
--ff-only
).--force-with-lease
ishlating..gitignore
fayli orqali keraksiz fayllarni inkor qilamiz:
# .gitignore misoli
node_modules/
.next/
dist/
.env
.env.local
*.log
*.DS_Store
$ echo "node_modules/\n.env\n.dist" >> .gitignore
Bir nechta GitHub hisobidan foydalanish va SSH sozlash:
# Yangi SSH kalit yaratish (ish/shaхsiy uchun alohida)
$ ssh-keygen -t ed25519 -C "work-email@company.com" -f ~/.ssh/id_ed25519_work
$ ssh-keygen -t ed25519 -C "personal@email.com" -f ~/.ssh/id_ed25519_personal
# Agentga qo'shish
$ eval "$(ssh-agent -s)"
$ ssh-add ~/.ssh/id_ed25519_work
$ ssh-add ~/.ssh/id_ed25519_personal
# ~/.ssh/config
Host github.com-work
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_work
Host github.com-personal
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_personal
# Remote URL'larda host alias ishlatish
$ git remote set-url origin git@github.com-work:company/repo.git
# yoki shaxsiy
$ git remote set-url origin git@github.com-personal:username/repo.git
github.com-work
vs github.com-personal
).user.name
va user.email
sozlamalarini repo darajasida override qiling.$ git config user.name "Work Dev"
$ git config user.email "work-email@company.com"
Commitdan oldin kodni avtomatik tekshirish uchun husky
va
lint-staged
ishlatamiz. Quyidagi misol pnpm
bilan:
# o'rnatish
$ pnpm add -D husky lint-staged
# package.json ga prepare skript qo'shing (bir marta)
$ npm pkg set scripts.prepare="husky"
$ pnpm prepare
# pre-commit hook yaratish
$ npx husky add .husky/pre-commit "pnpm lint && pnpm typecheck && pnpm test -w --if-present && pnpm lint-staged"
# lint-staged konfiguratsiyasi (package.json ichida)
"lint-staged": {
"*.{ts,tsx,js,jsx}": [
"pnpm eslint --fix",
"pnpm prettier --write"
],
"*.{md,mdx,css,scss,json}": [
"pnpm prettier --write"
]
}
git commit -m "msg" --no-verify
.-w
yoki ishchi paketga mos buyruqlarni sozlang.Branch nomlari aniq va izchil bo‘lsin. Tavsiya etiladigan prefikslar:
feature/<short-scope> # yangi imkoniyat
fix/<short-scope> # xatoni tuzatish
chore/<short-scope> # servis ishlar (deps, build, config)
refactor/<short-scope> # qayta tuzish, API o‘zgarmaydi
docs/<short-scope> # hujjatlar
perf/<short-scope> # ishlashni optimallashtirish
feature/auth-login
, fix/navbar-jump
.feature/123-auth-login
.^(feature|fix|chore|refactor|docs|perf)/[a-z0-9-]+$
.Turli holatlar uchun xavfsiz usullar:
# 1) Detach holatda eski commitni ko‘rish
$ git checkout <commit_sha>
# kerak bo‘lsa yangi branch oching
$ git switch -c hotfix/recover-<short>
# 2) Jamoaviy (public) tarixda orqaga qaytarish — revert (eng xavfsiz)
$ git revert <commit_sha> # bitta commitni bekor qiladi
$ git revert <from_sha>^..<to_sha> # intervalni bekor qiladi
# 3) Lokal tarixni tozalash — reset (tarixni o‘zgartiradi)
$ git reset --soft <commit_sha> # o‘zgarishlar staged holatda qoladi
$ git reset --mixed <commit_sha> # (default) staged dan chiqaradi
$ git reset --hard <commit_sha> # DIQQAT: o‘zgarishlar yo‘qoladi
# 4) Fayl bo‘yicha tiklash
$ git restore path/to/file # ishchi faylni tiklash
$ git restore --staged path/to/file # staged dan chiqarish
git push --force-with-lease
.Quyidagilar ish unumdorligini oshiradi. O‘rnatish (CLI):
$ code --install-extension eamodio.gitlens
$ code --install-extension mhutchie.git-graph
$ code --install-extension donjayamanne.githistory
$ code --install-extension github.vscode-pull-request-github
Shu bilan, git bilan amaliy ishlash uchun kerakli asosiy buyruqlar va tartiblar ko'rib chiqildi. Endi ularni projektlaringizda izchil qo'llash tajribangizni tez oshiradi.