Published on

Git: remote repozitoriyga push va pull qilish

Authors

HozirgΠ°Ρ‡Π° qilingan barcha o'zgarishlar faqat local (kompyuterdagi) repozitoriyda saqlangan edi. Remote repozitoriy (masalan, GitHub-dagi versiya) bu o'zgarishlardan hali xabardor emas. Bu darsda push va pull β€” local va remote repozitoriyalarni sinxronlash usullari ko'riladi.


Asosiy tushunchalar

  • Push β€” local commit-larni remote repozitoriyga yuborish
  • Pull β€” remote repozitoriydagi commit-larni local versiyaga olib kelish
Push:  Local repo  β†’  Remote repo (GitHub)
Pull:  Remote repo (GitHub)  β†’  Local repo

Clone β€” repozitoriyni birinchi marta kompyuterga ko'chirish, bir martalik amal. Push va pull esa β€” kundalik ish jarayonida doimiy ravishda qaytarilib turadigan amallar.


Standart ish jarayoni

Loyiha ustida ishlashda odatdagi ketma-ketlik:

o'zgartirish β†’ stage qilish β†’ commit qilish β†’ push qilish

Bu jarayon kun davomida bir necha marta takrorlanadi: stage β†’ commit β†’ push β†’ stage β†’ commit β†’ push.


"Ahead" va "behind" holatlari

Source Control panelida branch holati ko'rsatiladi:

  • Ahead (N commit) β€” local versiya remote-dan N ta commit oldinda, ya'ni hali push qilinmagan o'zgarishlar bor
  • Behind (N commit) β€” local versiya remote-dan N ta commit ortda, ya'ni remote-da bor, lekin local-da yo'q o'zgarishlar bor

Bu holat faqat joriy branch uchun amal qiladi β€” har bir branch o'zining ahead/behind holatiga ega.


Push qilish

Xcode-da commit qilingandan so'ng push amali bajariladi. Tizim qaysi branch-ga push qilinishini so'raydi β€” odatda joriy ishlanayotgan branch tanlanadi.

Push qilingandan so'ng:

  • Local va remote versiyalar bir xil commit-da bo'ladi
  • Source Control panelidagi "ahead" raqami yo'qoladi
  • GitHub-da o'zgarishlar ko'rinadi β€” har bir fayl uchun oxirgi commit ma'lumoti yangilanadi

Commit tarixi

GitHub-dagi yoki Git Kraken-dagi commit tarixida barcha commit xabarlari ko'rinadi. Bu boshqa dasturchilar uchun ham ochiq bo'ladi, shuning uchun:

  • Faqat shaxsiy ishlatiladigan, hali remote-ga push qilinmagan commit-larda tezkorlik uchun qisqa yoki "iflos" xabarlar qabul qilinishi mumkin
  • Remote repozitoriyga push qilinadigan commit-lar uchun aniq va tushunarli xabarlar yozish tavsiya etiladi (masalan, "feature: ..." yoki "fix: ..." formatida)

Commit-larni "squash" qilish va birlashtirish (merging) β€” bu mavzular alohida ko'rib chiqiladi.


Pull qilish

Boshqa joydan (yoki boshqa dasturchi tomonidan) remote repozitoriyga yangi commit qo'shilganda, local versiya bundan avtomatik xabardor bo'lmaydi. Bu holatda pull kerak bo'ladi.

Konflikt holati

Agar local versiyada remote-da yo'q commit bo'lsa va remote-da local-da yo'q commit bo'lsa (ikkala tomon ham mustaqil o'zgargan bo'lsa), push qilishga urinishda quyidagi xato chiqishi mumkin:

The local repository is out of date.
Make sure all changes have been pulled
before you can push to this branch.

Bu holat local branch bir vaqtning o'zida remote-dan bitta commit ortda va bitta commit oldinda bo'lganda yuz beradi.

Yechim β€” avval pull, keyin push

1. Integrate β†’ Pull (Main branch-dan)
2. Git avtomatik ravishda remote o'zgarishlarni local versiyaga birlashtiradi
3. Endi local tarix to'liq β€” push qilish mumkin

Agar ikkala tomondagi o'zgarishlar bir-biriga zid kelmasa, Git ularni avtomatik birlashtiradi (merge qiladi), qo'shimcha aralashuvsiz.


Tavsiya etiladigan odat

Ish boshlanishidan oldin, ayniqsa boshqa odamlar bilan ishlanadigan loyihalarda, avval pull qilib local versiyani remote bilan tenglashtirish tavsiya etiladi. Bu kelajakda konfliktlar ehtimolini kamaytiradi.


Xulosa

Bu darsda o'rganildi:

  • Push β€” local commit-larni remote-ga yuborish
  • Pull β€” remote commit-larni local-ga olib kelish
  • Ahead / Behind β€” local va remote branch orasidagi farq ko'rsatkichlari
  • Standart jarayon: stage β†’ commit β†’ push
  • Konflikt yuzaga kelganda β€” avval pull, keyin push
  • Git ziddiyatsiz o'zgarishlarni avtomatik birlashtira oladi

Keyingi darslarda branching va merging mavzulari ko'rib chiqiladi.

Buy mea coffee