Push qilish — lokal commit-larni uzoqdagi Git repozitoriyasiga yuborish, ularni jamoa a'zolari uchun mavjud qilish demakdir. Pushdan so'ng o'zgarishlar GitHub, GitLab yoki Bitbucketda paydo bo'ladi. GitHub Octoverse 2024 ma'lumotlariga ko'ra, platformaga har kuni 10 milliondan ortiq commit push qilinadi. Git push taqsimlangan jamoada ishni sinxronlashtirish uchun asosiy harakatdir.
Asosiy fikrlar
Git push — bu lokal repozitoriyadan uzoq repozitoriyaga commit-larni uzatuvchi buyruq. Commitdan farqli o'laroq, o'zgarishlarni faqat dasturchining lokal mashinasida saqlaydi, push esa bu o'zgarishlarni butun jamoa uchun e'lon qiladi. Push Pull Request yaratish va deploy qilishdan oldin majburiy qadamdir.
Git arxitekturasi har bir dasturchining o'z lokal repozitoriyasida ishlashini nazarda tutadi. Commit-lar lokal ravishda yaratiladi va dasturchi ularni push qilishga qaror qilguncha to'planadi. Bu erkinlik beradi: ko'plab lokal commit-lar qilish, tajriba o'tkazish va tarixni jamoaga ta'sir qilmasdan qayta yozish mumkin.
# Origin remote-ga push, main branch
git push origin main
# Joriy branchni remote-ga upstream bilan push qil
git push -u origin feature/new-dashboard
# Mos nomlar bilan barcha branchlarni push qil
git push --all origin
# Lease bilan force push (xavfsiz force push)
git push --force-with-lease
Pushdan so'ng uzoq repozitoriya refs-larni (branch havolalarini) yangilaydi, ular yangi commit-larga ishora qiladi. Boshqa dasturchilar bu o'zgarishlarni git pull yoki git fetch orqali olishlari mumkin. Aynan shu commit almashinuvi hamkorlikda ishlashning asosini tashkil qiladi.
Git push buyrug'i lokal va uzoq branch-larni taqqoslaydi va faqat yetishmayotgan commit-larni uzatadi. Git barcha fayllarni qaytadan yubormaydi — faqat farqni (delta) uzatadi, bu esa push-ni katta repozitoriyalarda ham tez qiladi. Git Protokoli uzatiladigan ma'lumot hajmini minimallashtiradigan smart transferdan foydalanadi.
Agar uzoq branchda lokalda mavjud bo'lmagan commit-lar bo'lsa, push rad etiladi. Bu o'zgarishlarni yo'qotishning oldini oluvchi himoya mexanizmidir. Bunday vaziyatda dasturchi avval git pull-ni bajarishi, o'zgarishlarni birlashtirishi va shundan keyin qayta push qilishi kerak. Muqobil variant force push bo'lib, u uzoq branch-ni qayta yozadi, ammo ehtiyotkorlik bilan ishlatilishi kerak.
| Buyruq | Harakat | Qachon ishlatish |
|---|---|---|
| git push | tracked branchga standart push | odatiy o'zgarishlarni yuborish |
| git push -u | upstream o'rnatish bilan push | yangi branchning birinchi pushi |
| git push --force-with-lease | xavfsiz force push | o'z branch-ni rebase qilgandan keyin |
| git push --force | majburiy push | faqat kolliziya yo'qligiga ishonchingiz komil bo'lsa |
| git push --delete | uzoq branchni o'chirish | branch merge qilingandan keyin tozalash |
Uzoq repozitoriyalarni tushunish to'g'ri pushning kalitidir. Odatda origin — standart uzoq repozitoriya nomi ishlatiladi. Git remote -v buyrug'i uzoq repozitoriyalar ro'yxatini va ularning URL-larini ko'rsatadi. Bir nechta remote qo'shish mumkin (masalan, asosiy repozitoriya uchun origin va fork uchun upstream).
Asosiy qoida: har bir mantiqiy tugallangan ish bosqichidan keyin push qilish kerak. Agar dasturchi vazifani yoki uning bir qismini tugatgan bo'lsa — push vaqti. Biroq, build-ni buzadigan tugallanmagan ishni push qilish tavsiya etilmaydi. Ishlaydigan build har qanday branchga push uchun minimal talabdir.
Jamoa ishlarida quyidagi ritm qabul qilingan: ertalab — hamkasblarning o'zgarishlarini olish uchun git pull, kun davomida — bir nechta commit va bir-ikki push, kechqurun — barcha tugallangan vazifalarning yakuniy pushi. Dasturchi qanchalik tez-tez push qilsa, branch-larni birlashtirishda konflikt xavfi shunchalik kam va ish jarayoni shunchalik shaffof bo'ladi.
Xavfsiz push — jamoada ma'lumot yo'qotilishi va konfliktlarning oldini oluvchi qoidalar to'plamidir. Birinchi va eng muhim qoida: agar loyihada to'g'ridan-to'g'ri deploy sozlanmagan bo'lsa, hech qachon to'g'ridan-to'g'ri main yoki master branchga push qilmang. Zamonaviy jamoalarda main branch himoyasi GitHub branch protection darajasida sozlanadi.
Ikkinchi qoida: pushdan oldin uzoq branch bilan sinxronlashing. Birlashishda merge commitdan qochish uchun git pull --rebase-ni bajaring. Bu tarixni soddalashtiradi va uni chiziqli qiladi. Agar push rad etilsa — yalang'och force push ishlatmang, avval uzoq branchda qanday commit-lar paydo bo'lganini tekshiring.
Uchinchi qoida: yuborishdan oldin avtomatik testlar va linter-ni ishga tushiruvchi pre-push hook-larni sozlang. Agar testlar muvaffaqiyatsiz bo'lsa — push bloklanadi. Bunday hook-lar Husky yoki Git hooks (pre-push fayli .git/hooksda) orqali sozlanadi.
To'rtinchi qoida: katta ikkilik fayllarni push qilmang. Git ikkilik artefaktlarni saqlash uchun mo'ljallanmagan — ular repozitoriyani shishirib, operatsiyalarni sekinlashtiradi. Katta fayllar uchun Git LFS (Large File Storage) ishlatiladi. Agar ikkilik fayl allaqachon push qilingan va tarixga tushgan bo'lsa, uni git filter-branch orqali olib tashlash kerak.
Muvaffaqiyatsiz pushning eng keng tarqalgan sababi — uzoq branchda lokalda mavjud bo'lmagan commit-larning borligi. Bu boshqa dasturchi o'z o'zgarishlarini xuddi shu branchga push qilganda sodir bo'ladi. Yechim: git pull-ni bajarish, mumkin bo'lgan konfliktlarni hal qilish va push-ni takrorlash.
# Push rad etildi — avval fetch va rebase qil
git fetch origin
git rebase origin/main
# Konfliktlarni hal qil, keyin:
git push --force-with-lease
# Yoki oddiygina uzoq o'zgarishlarni birlashtir
git pull origin main
git push
Ikkinchi sabab — branchga yozish huquqining yo'qligi. Agar main branch branch protection qoidasi bilan himoyalangan bo'lsa, to'g'ridan-to'g'ri push-lar taqiqlangan. Yechim: feature branchga push qilish va Pull Request yaratish. Himoya sozlamalari odatda GitHub settings yoki GitLab protected branches orqali boshqariladi.
Uchinchi sabab — autentifikatsiya muammolari. Eski credentials, SSHga o'tish yoki personal access tokenning o'zgarishi. Yechim: remote URL-ni tekshirish (git remote -v) va credentials-ni yangilash. 2021-yildan boshlab GitHub HTTPS uchun parol bilan autentifikatsiyani bekor qildi — shaxsiy token yoki SSH kaliti ishlatiladi.
Tez-tez beriladigan savollar
Push qilish — dasturchi repozitoriyasidan uzoq serverga (GitHub, GitLab) lokal commit-larni yuborishni anglatadi. Pushdan so'ng o'zgarishlar jamoa uchun mavjud bo'ladi, Pull Requestda paydo bo'ladi va deploy qilinishi mumkin. Push jamoa hamkorligidan oldin lokal kod bilan ishlashning yakuniy bosqichidir.
Commit o'zgarishlarni lokal ravishda, dasturchining repozitoriyasida saqlaydi. Push bu lokal commit-larni uzoq serverga yuboradi. Pushsiz ko'plab commit-lar qilish mumkin, ammo hamkasblar o'zgarishlarni ko'rishi uchun push qilish kerak. Commit — saqlash, push — e'lon qilish.
Push, uzoq branchda lokalda mavjud bo'lmagan commit-lar bo'lganda rad etiladi. Yechim: git pull (yoki git fetch + git rebase) ni bajaring, o'zgarishlarni birlashtiring va push-ni takrorlang. Agar o'z feature branchingizda ishlayotgan bo'lsangiz va o'zgarishlarga ishonchingiz komil bo'lsa, git push --force-with-lease dan foydalaning.
Ha, lekin ehtiyotkorlik bilan. O'zgarishlarni qaytaruvchi commit yaratish uchun git revert <commit-hash> dan foydalaning. So'ng yangi commit-ni push qiling. Agar commit-larni tarixdan olib tashlash kerak bo'lsa, git reset + git push --force-with-lease dan foydalaning, faqat o'z feature branchingizda. git revert umumiy branch-lar uchun xavfsiz tanlovdir.
Muntazam push lokal mashina ishdan chiqqanda ma'lumot yo'qotilishining oldini oladi, birlashtirishda konfliktlarni kamaytiradi va jamoaga ish jarayoni haqida ma'lumot beradi. Agar dasturchi bir hafta push qilmasa, uning o'zgarishlari main branchdan ancha uzoqlashishi mumkin, bu esa merge paytida murakkab konfliktlarga olib keladi.
Xulosa
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.
Shuningdek o'qing