Git — bu nima, ishlash prinsiplari va buyruqlari

Muallif: IT Sectr Nashr etilgan: 2026-05-09 O'qish vaqti: 8 daq

Git — bu 2005-yilda Linus Torvalds tomonidan Linux yadrosini ishlab chiqish uchun yaratilgan ochiq manbali taqsimlangan versiyalarni boshqarish tizimidir. SVN kabi markazlashtirilgan tizimlardan farqli o'laroq, Git har bir dasturchi qurilmasida repozitoriyning to'liq nusxasini saqlaydi, bu esa serverga doimiy ulanishsiz ishlash imkonini beradi. Git SCM, 2024 ma'lumotlariga ko'ra, Git barcha tijoriy dasturiy ta'minot loyihalarining 90% dan ortig'ida qo'llaniladi.

Asosiy fikrlar

  • Git — har bir dasturchi kompyuterida o'zgarishlarning to'liq tarixiga ega taqsimlangan VCS.
  • Commitlar o'zgarishlarni kuzatish uchun noyob SHA-1 xeshi bilan fayl holatining suratlarini yaratadi.
  • Filiallar Git-da funksiyalarni ishlab chiqishni ajratadi va ziddiyatsiz parallel ishlash imkonini beradi.
  • Merge va Rebase — commitlar tarixiga turlicha yondashuvlar bilan o'zgarishlarni integratsiyalashning ikki usuli.
  • GitHub, GitLab va Bitbucket — Git-repozitoriyalar ustiga UI va CI/CD qo'shadigan veb platformalar.

Git nima?

Git — fayllardagi o'zgarishlarni kuzatadigan va bir nechta dasturchilarga bir vaqtning o'zida bitta loyiha ustida ishlash imkonini beradigan taqsimlangan versiyalarni boshqarish tizimidir (VCS). Markazlashtirilgan tizimlardan farqli o'laroq, Git-da har bir dasturchi o'zgarishlarning to'liq tarixini o'z ichiga olgan repozitoriyning to'liq nusxasiga ega, bu tizimni ma'lumot yo'qotilishiga chidamli qiladi va markaziy serverga doimiy ulanishni talab qilmaydi.

Git tarixi 2005-yilda, BitKeeper kompaniyasi Linux yadrosi dasturchilari uchun o'z tizimiga bepul litsenziyani bekor qilganidan so'ng, Linus Torvalds yangi VCS yaratishi bilan boshlandi. Maqsadlar: tezlik, arxitekturaning soddaligi, filiallar orqali chiziqli bo'lmagan ishlab chiqishni qo'llab-quvvatlash va to'liq taqsimlanganlik edi. 3 oy ichida Torvalds Git yadrosini yozdi va bir yildan so'ng loyiha Junio Hamano boshqaruvi ostida o'z-o'zini boshqarishga o'tdi.

Stack Overflow so'roviga (2024) ko'ra, professional dasturchilarning 93,9% i Git-dan foydalanadi, bu uni sanoatda dominant versiyalarni boshqarish tizimiga aylantiradi. Eng yaqin raqib — Subversion (SVN) — loyihalarning atigi 5,2% ida, asosan markazlashtirilgan jarayonlarga ega yirik korporativ muhitlarda qo'llaniladi.

Git qanday ishlaydi: repozitoriy va commitlar

Git repozitoriyi — Git barcha fayllardagi o'zgarishlarni kuzatadigan katalogdir. Katalog ichida tizimning barcha obyektlari saqlanadigan maxfiy .git papkasi joylashgan: commitlar, daraxtlar, bloblar va havolalar. Dasturchi commit yaratganda, Git fayllarni to'liq nusxalamaydi — u holatning suratini (snapshot) yaratadi va unga havola saqlaydi.

Har bir commit o'z ichiga oladi: noyob SHA-1 xesh (40 belgi), oldingi commitga havola (parent), muallif, sana, commit xabari va commit paytidagi fayllar holatini tavsiflovchi daraxtga (tree) havola. Commitlar zanjiri yo'naltirilgan asiklik grafikni tashkil qiladi, bunda har bir commit bir yoki bir nechta ota-onaga ishora qiladi.

bash
# Repozitoriyni ishga tushirish
git init my-project
cd my-project

# Commit yaratish
echo "Hello, Git" > README.md
git add README.md
git commit -m "Initial commit"

# Tarixni ko'rish
git log --oneline --graph --all

Git uchta asosiy sohadan foydalanadi: working directory (diskdagi fayllar), staging area (tayyorlangan fayllar tushadigan indeks) va repository (commitlar tarixi). git add buyrug'i o'zgarishlarni ishchi katalogdan staging-ga ko'chiradi, git commit esa staging tarkibini repozitoriyada qayd etadi. Bu bo'linish dasturchiga har bir tuzatishni alohida qayd etmasdan, o'zgarishlar to'plamidan mazmunli commit yig'ish imkonini beradi.

Git-ning asosiy buyruqlari

Git-ning asosiy buyruqlari dasturchining kundalik operatsiyalarining 90% ini qamrab oladi. git clone buyrug'i uzoq repozitoriyning mahalliy nusxasini yaratadi, git pull serverdan o'zgarishlarni olib, joriy filial bilan birlashtiradi, git push esa mahalliy commitlarni serverga yuboradi. Ushbu uchta buyruq Git bilan ishlashning asosiy siklini tashkil qiladi.

Holatni ko'rish uchun git status ishlatiladi — u qaysi fayllar o'zgartirilganini, qaysilari staging-ga qo'shilganini va qaysilari kuzatilmayotganini ko'rsatadi. git diff staging-ga qo'shishdan oldin fayllardagi aniq o'zgarishlarni ko'rsatadi. Quyida eng ko'p ishlatiladigan buyruqlar jadvali keltirilgan:

BuyruqHarakatMisol
git cloneUzoq repozitoriyni nusxalaydigit clone https://example.com/repo
git addFayllarni staging-ga qo'shadigit add src/main.kt
git commitO'zgarishlarni tarixda qayd etadigit commit -m "Fix login bug"
git pushCommitlarni serverga yuboradigit push origin main
git pullServerdan o'zgarishlarni oladigit pull origin feature

O'zgarishlarni bekor qilish uchun Git bir nechta variantlarni taklif qiladi. git reset filial ko'rsatkichini berilgan commitga ko'chiradi va staging yoki ishchi katalogni tiklash mumkin. git revert ko'rsatilgan commitning o'zgarishlarini bekor qiladigan yangi commit yaratadi — bu umumiy filiallar uchun xavfsiz bekor qilish usuli, chunki tarix qayta yozilmaydi.

Git-da filiallar: main, feature va release

Git-dagi filiallar — ma'lum bir commitga engil ko'chma ko'rsatkichlardir. Yangi filial yaratish fayllarni nusxalamaydi, balki faqat yangi ko'rsatkich yaratadi, bu esa filiallashni amalda bir zumda qiladi. main filiali (avval master) — loyihaning barqaror, chiqarishga tayyor kodini o'z ichiga olgan asosiy filialdir.

Standart amaliyot Git Flow yoki GitHub Flow dan foydalanishdir. Git Flow-da filiallar ishlatiladi: main (chiqarish kodi), develop (integratsiya filiali), feature/* (yangi funksiyalar), release/* (chiqarishlarni tayyorlash) va hotfix/* (shoshilinch tuzatishlar). GitHub Flow soddaroq: faqat main va feature-filiallar, barcha o'zgarishlar Pull Request orqali yetkaziladi.

bash
# Filial yaratish va unga o'tish
git branch feature-auth
git checkout feature-auth
# yoki bitta buyruq bilan:
git checkout -b feature-auth

# Filiallar ro'yxati
git branch --list
git branch -a  # barcha branch lar, jumladan o'chirilganlari

# Filialni o'chirish
git branch -d feature-auth

Git filiallashining muhim xususiyati — cherry-pick imkoniyati: alohida commitni bir filialdan boshqasiga git cherry-pick <hash> buyrug'i bilan ko'chirish. Bu butun filialni birlashtirmasdan, feature-filialdan release-ga xato tuzatishini ko'chirish kerak bo'lganda foydalidir. Git shuningdek commitlarni yopishtirish, qayta tartiblash va tahrirlash uchun rebase va interaktiv rebase (git rebase -i) ni qo'llab-quvvatlaydi.

Birlashtirish: Merge va Rebase

Merge (birlashtirish) ikki ota-onaga ega maxsus merge-commit yaratadi. Bu commit ikki filialning birlashish faktini qayd etadi va to'liq tarixni saqlaydi — birlashish qayerda va qachon sodir bo'lgani ko'rinadi. Merge tarixni yaratilgan shaklda saqlaydi, bu auditni osonlashtiradi, ammo commit grafigini murakkabroq qiladi.

Rebase (qayta asoslash) merge-commit yaratish o'rniga joriy filialning commitlarini maqsadli filialning tepasiga ko'chiradi. Tarix chiziqli bo'ladi — ishlab chiqish ketma-ket olib borilgandek taassurot qoldiradi. Biroq, rebase tarixni qayta yozadi, commitlarning SHA-1 xeshlarini o'zgartiradi, bu esa uni boshqa dasturchilar kirishi mumkin bo'lgan umumiy filiallar uchun xavfli qiladi.

Tanlash bo'yicha tavsiya: tarixni boshqa dasturchilar ko'radigan umumiy filiallar uchun merge (feature → develop) dan va Pull Request yaratishdan oldin main-dan yangi o'zgarishlarni o'z feature-filialingizga qo'llash kerak bo'lganda rebase dan foydalaning. Qoida oddiy: agar commit allaqachon serverga yuborilgan bo'lsa — uni rebase qilmang.

Ziddiyatlarni hal qilish

Birlashtirish ziddiyati Git bir fayldagi o'zgarishlarni avtomatik birlashtira olmaganda yuzaga keladi. Git ziddiyatli qismlarni faylda maxsus markerlar bilan belgilaydi: <<<<<<< (bizning o'zgarishlar), ======= (ajratgich), >>>>>>> (ularning o'zgarishlari). Dasturchi faylni qo'lda tahrirlaydi, kerakli variantni tanlaydi yoki ikkalasini birlashtiradi va birlashtirishni commit bilan yakunlaydi.

Uzoq repozitoriyalar bilan ishlash

Uzoq repozitoriy (remote) — serverda joylashgan Git repozitoriyining nusxasidir. GitHub, GitLab va Bitbucket uzoq repozitoriyalarni joylashtirish uchun eng mashhur platformalardir. Ular kodni ko'rish, kirishni boshqarish, kodni ko'rib chiqish va CI/CD tizimlari bilan integratsiya uchun veb interfeysni taqdim etadi.

Git-da bir loyiha uchun bir nechta uzoq repozitoriyalarni sozlash mumkin. Odatiy bo'lib, asosiy remote origin deb ataladi. git remote add buyrug'i yangi remote qo'shadi, git fetch birlashtirmasdan o'zgarishlarni oladi, git pull esa git fetch + git merge uchun qisqartmadir. Pull Request orqali kod bilan ishlash uchun dasturchi repozitoriyning forkini yaratadi, uni klonlaydi, feature-filialda ishlaydi va asl repozitoriyga birlashtirish so'rovini yuboradi.

bash
# Uzoq repozitoriy qo'shish
git remote add origin https://github.com/user/repo.git

# Uzoq repozitoriyalarni ko'rish
git remote -v

# Filialni serverga yuborish
git push -u origin feature-auth

# Uzoq filialdan o'zgarishlarni olish
git pull origin main

Uzoq repozitoriyalar chiqarish versiyalarini belgilash uchun teglashni qo'llab-quvvatlaydi. Teglar engil (shunchaki commitga ko'rsatkich) va annotatsiyalangan (metama'lumot: muallif, sana, xabar) bo'lishi mumkin. Annotatsiyalangan teglar chiqarish versiyalari uchun tavsiya etiladi, chunki ular versiya haqida to'liq ma'lumotni uzatadi va mualliflikni tasdiqlash uchun GPG kaliti bilan imzolanishi mumkin.

Parallel ishlash uchun Git Worktree

Git Worktree ular o'rtasida almashmasdan turli kataloglarda bir vaqtning o'zida bir nechta filial bilan ishlash imkonini beradi. git worktree add ../feature-auth feature-auth buyrug'i feature-auth nomli yangi ishchi katalogni yaratadi, bu yerda asosiy katalogda filialni o'zgartirmasdan kod yozish mumkin. Worktree asosiy katalog uzoq muddatli ishlab chiqish bilan band bo'lganda release filialida tezkor tuzatishlar uchun foydalidir.

Bog'liqliklar uchun Git Submodules

Git Submodules — bir Git repozitoriyini boshqasiga kiritish mexanizmidir. Submodul tashqi repozitoriyning belgilangan commitiga havolani saqlaydi, bu esa qurilishning takrorlanishini kafolatlaydi. git submodule add https://github.com/example/lib.git buyrug'i tashqi kutubxonani pastki modul sifatida qo'shadi. Pastki modullari bo'lgan loyihani klonlashda barcha bog'liqliklarni yuklash uchun git submodule update --init --recursive bajarilishi kerak.

Tez-tez so'raladigan savollar

Git SVN-dan nimasi bilan farq qiladi?

Git — mahalliy tarixga ega va oflayn ishlash imkoniyatiga ega taqsimlangan VCS. SVN — fayllarni ko'rishdan tashqari barcha operatsiyalar uchun serverga doimiy ulanishni talab qiladigan markazlashtirilgan tizim.

Oxirgi commitni qanday bekor qilish mumkin?

Xavfsiz bekor qilish uchun git revert HEAD dan foydalaning (yangi commit yaratiladi). Agar commit hali serverga yuborilmagan bo'lsa, git reset --soft HEAD~1 dan foydalanishingiz mumkin.

.gitignore nima va u nima uchun kerak?

.gitignore — Git e'tiborsiz qoldirishi kerak bo'lgan fayl va kataloglar namunalari sanab o'tilgan fayl. Vaqtinchalik fayllarni, qurilishlarni va IDE sozlamalarini repozitoriyadan chiqarib tashlash uchun ishlatiladi.

git pull va git fetch o'rtasidagi farq nima?

git fetch o'zgarishlarni serverdan yuklab oladi, lekin ularni joriy filial bilan birlashtirmaydi. git pull fetch qiladi va darhol merge bajaradi. Nazorat uchun fetch + diff ko'rish, keyin qo'lda merge dan foydalaning.

Oxirgi commit xabarini qanday tuzatish mumkin?

git commit --amend dan foydalaning — bu buyruq commit xabarini o'zgartirish uchun muharrirni ochadi. Agar commit allaqachon serverda bo'lsa, git push --force talab qilinadi, bu umumiy filiallar uchun xavfli.

Xulosa

  • Git — Linus Torvalds tomonidan yaratilgan va dasturiy ta'minot ishlab chiqishda standartga aylangan taqsimlangan versiyalarni boshqarish tizimi.
  • Commitlar SHA-1 xeshi va oldingi commitga havola bilan fayl holatining suratlarini qayd etadi.
  • Filiallar — commitlarga engil ko'rsatkichlar, funksiyalarni parallel ishlab chiqish imkonini beradi.
  • Merge ikki ota-onali merge-commit yaratadi, Rebase — chiziqli grafik uchun tarixni qayta yozadi.
  • Uzoq repozitoriyalar (origin) push va pull orqali dasturchilar o'rtasida kodni sinxronlashtiradi.
  • GitHub, GitLab, Bitbucket Git ustiga veb interfeys, kod ko'rib chiqish va CI/CD qo'shadi.
  • Boshlang repozitoriyni klonlash va uchta buyruqni o'zlashtirish bilan: commit, push, pull — ular asosiy ish siklini qamrab oladi.

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing