Bosh sahifa Wiki Push

Push

Push — lokal Git repositorydagi commit va reference’larni remote repositoryga yuborish amali. git push yangi obyektlarni uzatadi va serverdagi branch yoki tag reference’ini yangilashni so‘raydi. Push fayllarni to‘g‘ridan-to‘g‘ri “server papkasiga” ko‘chirmaydi; commit graph hamda reference yangilanadi.

Refspec

Oddiy buyruq:

git push origin main

Bu lokal mainni remote’dagi refs/heads/mainga yuboradi. Umumiy refspec <source>:<destination> shaklida. git push -u origin feature upstream bog‘lanishini o‘rnatadi, keyingi git push va git pull defaultsiz ishlashi mumkin.

Pushdan oldin Git serverda mavjud bo‘lmagan commit va bloblarni pack qiladi. Server obyektlarni qabul qilib, hook va permissionlarni tekshiradi, keyin reference’ni atomar yangilaydi yoki rad etadi.

Fast-forward talabi

Remote branchda lokal tarixda yo‘q yangi commit bo‘lsa, oddiy push non-fast-forward sifatida rad etiladi. Bu boshqa ishtirokchi tarixini tasodifan yo‘qotishni oldini oladi. Dasturchi fetch qilib remote o‘zgarishni merge yoki rebase bilan integratsiya qiladi, so‘ng yana push qiladi.

--force remote reference’ni majburan almashtiradi va boshqalarning commitini branch uchidan chiqarishi mumkin. --force-with-lease remote branch kutilgan eski commitda turgan bo‘lsa force qiladi; orada yangi push bo‘lsa rad etadi. Bu xavfni kamaytiradi, ammo shared main branchda protection qoidalari force pushni to‘liq taqiqlashi mumkin.

Branch protection

Hosting platformasi main branchga to‘g‘ridan-to‘g‘ri pushni bloklab, pull request, review, signed commit yoki status checks talab qiladi. Git transporti obyektni qabul qilishdan oldin server siyosatini tekshiradi. Admin bypass huquqi audit va eng kam imtiyoz bilan boshqariladi.

Secret scanning yoki server hook maxfiy kalit, katta fayl yoki taqiqlangan format sabab pushni rad qilishi mumkin. Secret allaqachon commitga kirgan bo‘lsa, pushni to‘xtatish bilan birga credential bekor qilinadi.

Tag va o‘chirish

Default push barcha lokal tagni avtomatik yubormasligi mumkin. Muayyan tag git push origin v1.0.0, bir nechta tegishli tag esa mos option bilan yuboriladi. Remote branchni o‘chirish uchun git push origin --delete branch ishlatiladi.

Branchni remote’dan o‘chirish commit obyektlarini darhol fizik yo‘q qilmasligi mumkin; boshqa branch, tag, reflog yoki clone ularga havola qilishi mumkin.

Atomic va follow-tags

Bir nechta reference yuborilganda --atomic server qo‘llasa hammasi yangilanishi yoki hech biri yangilanmasligini talab qiladi. Bu release branch va tagni yarim holatda qoldirmaslikka yordam beradi. Push muvaffaqiyati deploy muvaffaqiyati emas; CI/CD alohida workflow sifatida ishga tushishi mumkin.

Muzokara va obyekt uzatish

Push boshlanganda lokal Git serverdagi reference’lar holatini oladi va qaysi commit hamda obyektlar masofada yo‘qligini aniqlaydi. Zarur obyektlar packfilega yig‘ilib uzatiladi, so‘ng server reference’ni yangilash shartlarini tekshiradi. Hook, branch protection yoki obyekt hajmi cheklovi rad javobini berishi mumkin; obyektlar yetib borgani branch albatta siljidi degani emas. --force-with-lease oddiy --forcedan xavfsizroq, chunki remote branch foydalanuvchi oxirgi ko‘rgan holatdan o‘zgarmaganini tekshiradi. Shunga qaramay, umumiy branch tarixini qayta yozish hamkorlarning lokal ishiga ta’sir qiladi.

Masofaviy server qabul qilgan commit darhol productionga chiqishi shart emas. Push ko‘pincha CI tekshiruvini, review jarayonini yoki deploy pipeline’ini boshlovchi hodisadir. Kodni uzatish bilan xizmatni chiqarish orasidagi bu chegara ruxsatlar va auditda alohida boshqariladi.

Bog‘liq tushunchalar

Git, remote, branch, refspec, fast-forward, force-with-lease, branch protection