Remote branch — boshqa repositoryda, odatda serverda saqlanadigan branch reference. Lokal Git remote branchning o‘zini bevosita tahrir qilmaydi; fetchdan keyin uning oxirgi ma’lum holatini origin/main kabi remote-tracking branch orqali ko‘rsatadi. Lokal branch push va pull uchun shu tracking reference bilan bog‘lanishi mumkin.
Remote-tracking reference
origin/main lokal repository ichidagi read-onlyga yaqin reference bo‘lib, oxirgi fetch yoki push paytida remote main qayerda bo‘lganini bildiradi. U server bilan real vaqt sinxron emas. Boshqa foydalanuvchi push qilgan bo‘lsa, git fetch origin bajarilmaguncha lokal origin/main eski holatda qoladi.
git branch -r
git log origin/main
Remote-tracking branchga odatiy commit qilinmaydi. Uning asosida lokal branch yaratiladi: git switch -c feature --track origin/feature.
Upstream bog‘lanish
Lokal branchning upstream’i remote-tracking branch bo‘lishi mumkin. git status ahead va behind sonini shu bog‘lanish bo‘yicha hisoblaydi. git push -u origin feature push bilan birga upstream o‘rnatadi.
Ahead lokalda remote’da yo‘q commitlar, behind remote-tracking reference’da lokalda yo‘q commitlar borligini bildiradi. Hisob faqat oxirgi fetch holatiga asoslangan.
Fetch va refspec
Remote konfiguratsiyasidagi fetch refspec serverdagi refs/heads/*ni lokal refs/remotes/origin/*ga xaritalaydi. git fetch obyekt va reference’larni yangilaydi, joriy working branchni avtomatik merge qilmaydi.
Bir nechta remote bo‘lsa origin/main va upstream/main turli tarixni ko‘rsatishi mumkin. Remote nomi URL va vazifani aniq ajratadi. git remote -v fetch hamda push URLlarini ko‘rsatadi; ular turli bo‘lishi ham mumkin.
O‘chirilgan branch
Serverda branch o‘chirilsa lokal remote-tracking reference avtomatik darhol yo‘qolmaydi. git fetch --prune endi remote’da mavjud bo‘lmagan tracking reference’larni olib tashlaydi. Bu commit obyektlarini darhol yo‘q qilmaydi, agar lokal branch yoki boshqa reference ularga ishora qilsa saqlanadi.
git branch -d lokal branchni, git push origin --delete name remote branchni o‘chiradi. Ikki amalning doirasi boshqa.
Remote HEAD
origin/HEAD remote default branchga symbolic reference bo‘lishi mumkin. U origin/mainga ishora qiladi, lekin alohida rivojlanish branchi emas. Default branch o‘zgarsa remote HEAD yangilanadi; lokal ma’lumot fetch yoki set-head buyrug‘i bilan moslanadi.
Xavfsizlik va nomlar
Remote branch nomi CI workflow triggeriga kirishi mumkin. Ishonchsiz nomni shell commandga xavfsiz escaping qilmasdan qo‘shish command injection keltiradi. Branch nomi pathga o‘xshash slashlarni saqlashi mumkin, ammo Git ref formatida taqiqlangan ketma-ketliklar ham bor.
Masofaviy holatning eskirishi
origin/main serverga real vaqtda ulanib turadigan ko‘rsatkich emas. U oxirgi fetch yoki pull paytida ko‘rilgan remote holatning lokal nusxasidir. Boshqa foydalanuvchi serverga yangi commit yuborgan bo‘lsa, fetch bajarilmaguncha lokal taqqoslash buni ko‘rsatmaydi. Xuddi shunday, git branch -r o‘chirilgan remote branchni prune qilinmaguncha ro‘yxatda saqlashi mumkin. CI yoki release skripti qarorni yangi holat asosida chiqarishi uchun avval kerakli remote va refspecni aniq fetch qiladi. Remote-tracking branchni qo‘lda commit qilish uchun checkout qilish emas, undan yangi lokal branch yaratish odatiy usuldir.
Bir repositoryda origin, upstream va deployment mirror kabi bir nechta remote bo‘lishi mumkin. Ularning fetch va push URLlari hatto turlicha sozlanadi. Buyruqda remote nomini ochiq ko‘rsatish qaysi serverdan tarix olinayotgani yoki qayerga yuborilayotganini tushunarli qiladi.
Bog‘liq tushunchalar
Git, remote, remote-tracking branch, upstream, fetch, push, refspec