Git branch (tarmoq)
Git branch (tarmoq)
Git branch nima?
Git’da branch — bu asosiy loyihaga ta’sir qilmasdan o‘zgarishlar kiritish va yangi g‘oyalarni sinab ko‘rish mumkin bo‘lgan alohida ish maydoniga o‘xshaydi. Uni kodingiz uchun “parallel olam” deb tasavvur qiling.
Nega branch’lardan foydalanish kerak?
Branch’lar asosiy branch’ga xalaqit bermasdan loyihaning turli qismlari, masalan, yangi funksiyalar yoki xatolarni tuzatish ustida ishlash imkonini beradi.
Branch yaratishning keng tarqalgan sabablari
- Yangi funksiya ishlab chiqish
- Xatoni tuzatish
- G‘oyalar bilan tajriba qilish
Misol: Git bilan va Git’siz
Aytaylik, sizda katta loyiha bor va uning dizaynini yangilashingiz kerak.
Bu Git’siz va Git bilan qanday kechardi:
Git’siz:
- Ishlab turgan (live) versiyaga ta’sir qilmaslik uchun barcha tegishli fayllarning nusxalarini yarating
- Dizayn ustida ishlashni boshlaysiz va kod boshqa fayllardagi kodga bog‘liq ekanini, ularni ham o‘zgartirish kerakligini bilib qolasiz!
- Bog‘liq fayllarning ham nusxalarini yarating. Har bir bog‘liq fayl to‘g‘ri fayl nomiga havola qilishiga ishonch hosil qiling
- FAVQULODDA VAZIYAT! Loyihaning boshqa joyida imkon qadar tezroq tuzatilishi kerak bo‘lgan, bunga aloqasi yo‘q xato bor!
- Barcha fayllaringizni saqlang va ustida ishlayotgan nusxalaringiz nomlarini yozib qo‘ying
- Aloqasi yo‘q xato ustida ishlang va uni tuzatish uchun kodni yangilang
- Dizaynga qayting va u yerdagi ishni yakunlang
- Kodni nusxalang yoki fayllar nomini o‘zgartiring, shunda yangilangan dizayn ishlab turgan versiyada bo‘ladi
- (2 hafta o‘tgach, aloqasi yo‘q xato yangi dizayn versiyasida tuzatilmaganini tushunasiz, chunki fayllarni tuzatishdan oldin nusxalagansiz)
Git bilan:
- new-design nomli yangi branch’da asosiy branch’ga ta’sir qilmasdan kodni to‘g‘ridan-to‘g‘ri tahrirlang
- FAVQULODDA VAZIYAT! Loyihaning boshqa joyida imkon qadar tezroq tuzatilishi kerak bo‘lgan, bunga aloqasi yo‘q xato bor!
- Asosiy loyihadan small-error-fix nomli yangi branch yarating
- Aloqasi yo‘q xatoni tuzating va small-error-fix branch’ini asosiy branch bilan birlashtiring (merge)
- new-design branch’iga qaytasiz va u yerdagi ishni yakunlaysiz
- new-design branch’ini main bilan birlashtiring (sizda yetishmayotgan kichik xato tuzatilgani haqida ogohlantirish olasiz)
Branch’lar asosiy branch’ga ta’sir qilmasdan loyihaning turli qismlari ustida ishlash imkonini beradi.
Ish tugallangach, branch asosiy loyiha bilan birlashtirilishi (merge) mumkin.
Hatto branch’lar o‘rtasida almashib, ular bir-biriga xalaqit bermagan holda turli loyihalar ustida ishlashingiz ham mumkin.
Git’da branch yaratish juda yengil va tez!
Yangi branch yaratish
Aytaylik, siz yangi funksiya qo‘shmoqchisiz. Buning uchun yangi branch yaratishingiz mumkin.
Keling, index.html sahifamizga ba’zi yangi funksiyalar qo‘shamiz.
Biz lokal repozitoriyimizda ishlayapmiz va asosiy loyihani bezovta qilishni yoki uni buzib qo‘yishni xohlamaymiz.
Shuning uchun yangi branch yaratamiz:
Misol
git branch hello-world-images
Endi biz “hello-world-images” nomli yangi branch yaratdik
Barcha branch’larni ro‘yxat qilish
Keling, yangi branch yaratganimizni tasdiqlaylik.
Repozitoriyingizdagi barcha branch’larni ko‘rish uchun quyidagidan foydalaning:
Misol
git branch
hello-world-images
* master
“hello-world-images” nomli yangi branch’ni ko‘rishimiz mumkin, lekin
master yonidagi * belgisi hozir aynan shu branch’da ekanimizni bildiradi.
Branch’lar o‘rtasida almashish
checkout — branch’ga o‘tish (checkout) uchun ishlatiladigan buyruq.
U bizni joriy branch’dan buyruq oxirida ko‘rsatilgan branch’ga o‘tkazadi:
Misol
git checkout hello-world-images
Switched to branch 'hello-world-images'
Endi asosiy branch’ga ta’sir qilmasdan yangi branch’ingizda ishlashingiz mumkin.
Branch’da ishlash
Endi joriy ish maydonimizni master branch’idan yangi branch’ga ko‘chirdik
Sevimli muharriringizni oching va ba’zi o‘zgarishlar kiriting.
Ushbu misol uchun ishchi papkaga rasm (img_hello_world.jpg) va index.html fayliga bir qator kod qo‘shdik:
Misol
<!DOCTYPE html>
<html>
<head>
<title>Hello World!</title>
<link rel="stylesheet" href="bluestyle.css">
</head>
<body>
<h1>Hello world!</h1>
<div><img src="img_hello_world.jpg" alt="Hello World from Space"
style="width:100%;max-width:960px"></div>
<p>This is the first file in my new Git Repo.</p>
<p>A new line in our file!</p>
</body>
</html>
Biz faylga o‘zgartirish kiritdik va ishchi katalogga (main branch bilan bir xil katalogga) yangi fayl qo‘shdik.
Endi joriy branch holatini tekshiring:
Misol
git status
On branch hello-world-images
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: index.html
Untracked files:
(use "git add <file>..." to include in what will be committed)
img_hello_world.jpg
no changes added to commit (use "git add" and/or "git commit -a")
Keling, bu yerda nima sodir bo‘layotganini ko‘rib chiqamiz:
- index.html faylimizda o‘zgarishlar bor, lekin fayl
commituchun stage qilinmagan img_hello_world.jpgtrackedholatida emas
Shuning uchun bu branch uchun ikkala faylni ham staging muhitiga qo‘shishimiz kerak:
Misol
git add --all
Alohida fayl nomlari o‘rniga --all parametridan foydalanish barcha o‘zgargan (yangi, o‘zgartirilgan va o‘chirilgan) fayllarni stage qiladi.
branch holatini (status) tekshiring:
Misol
git status
On branch hello-world-images
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: img_hello_world.jpg
modified: index.html
O‘zgarishlarimizdan mamnunmiz. Shuning uchun ularni branch’ga commit qilamiz:
Misol
git commit -m "Added image to Hello World"
[hello-world-images 0312c55] Added image to Hello World
2 files changed, 1 insertion(+)
create mode 100644 img_hello_world.jpg
Endi bizda master branch’idan farq qiladigan yangi branch bor.
Eslatma: checkout buyrug‘ida -b parametridan foydalanish, agar branch mavjud bo‘lmasa, yangi branch yaratadi va unga o‘tadi
Branch’lar o‘rtasida almashish
Endi turli branch’lar bilan ishlash qanchalik tez va oson ekanini hamda bu qanchalik yaxshi ishlashini ko‘rib chiqaylik.
Hozir biz hello-world-images branch’idamiz. Bu branch’ga rasm qo‘shdik, shuning uchun joriy katalogdagi fayllarni ro‘yxat qilaylik:
Misol
ls
README.md bluestyle.css img_hello_world.jpg index.html
Yangi img_hello_world.jpg faylini ko‘rishimiz mumkin, html faylni ochsak, kod o‘zgartirilganini ko‘ramiz. Hammasi kutilganidek.
Endi branch’ni master’ga almashtirganimizda nima sodir bo‘lishini ko‘raylik
Misol
git checkout master
Switched to branch 'master'
Yangi rasm bu branch’ning bir qismi emas. Joriy katalogdagi fayllarni yana ro‘yxat qiling:
Misol
ls
README.md bluestyle.css index.html
img_hello_world.jpg endi yo‘q! Html faylni ochsak, kod o‘zgartirishdan oldingi holatiga qaytganini ko‘ramiz.
Branch’lar bilan ishlash qanchalik osonligini ko‘ryapsizmi? Va bu turli narsalar ustida ishlash imkonini qanday berishini?
Favqulodda branch
Endi tasavvur qiling, hello-world-images bilan ishimiz hali tugamagan, lekin master’dagi xatoni tuzatishimiz kerak.
Men master’ni to‘g‘ridan-to‘g‘ri o‘zgartirishni xohlamayman, hello-world-images’ga ham tegishni xohlamayman, chunki u hali tayyor emas.
Shuning uchun favqulodda vaziyatni hal qilish uchun yangi branch yaratamiz:
Misol
git checkout -b emergency-fix
Switched to a new branch 'emergency-fix'
Endi master’dan yangi branch yaratdik va unga o‘tdik. Boshqa branch’larga xalaqit bermasdan xatoni xavfsiz tuzatishimiz mumkin.
Keling, xayoliy xatomizni tuzataylik:
Misol
<!DOCTYPE html>
<html>
<head>
<title>Hello World!</title>
<link rel="stylesheet" href="bluestyle.css">
</head>
<body>
<h1>Hello world!</h1>
<p>This is the first file in my new Git Repo.</p>
<p>This line is here to show how merging works.</p>
</body>
</html>
Biz bu faylga o‘zgartirishlar kiritdik va bu o‘zgarishlarni master branch’iga o‘tkazishimiz kerak.
Holatni tekshiring:
Misol
git status
On branch emergency-fix
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: index.html
no changes added to commit (use "git add" and/or "git commit -a")
faylni stage qiling va commit qiling:
Misol
git add index.html
git commit -m "updated index.html with emergency fix"
[emergency-fix dfa79db] updated index.html with emergency fix
1 file changed, 1 insertion(+), 1 deletion(-)
Endi master uchun tuzatish tayyor va ikki branch’ni birlashtirishimiz (merge) kerak.
Branch’ni o‘chirish
Branch bilan ishingiz tugagach, uni o‘chirishingiz mumkin:
Misol
git branch -d hello-world-images
Bu hello-world-images nomli branch’ni o‘chiradi (agar u allaqachon birlashtirilgan bo‘lsa).
Branch’lar bilan ishlash bo‘yicha eng yaxshi amaliyotlar
- Aniq, tavsiflovchi branch nomlaridan foydalaning (masalan,
feature/login-pageyokibugfix/header-crash). - Har bir branch’ni bitta maqsad yoki funksiyaga qaratilgan holda saqlang.
- Branch’ingiz dolzarb bo‘lib turishi uchun asosiy branch’dagi o‘zgarishlarni muntazam ravishda birlashtirib turing.
- Repozitoriyingizni toza saqlash uchun endi kerak bo‘lmagan branch’larni o‘chiring.
Amaliy misollar
- Branch nomini o‘zgartirish:
git branch -m old-name new-name - Barcha branch’larni ro‘yxat qilish:
git branch - Branch’larni almashtirish:
git checkout branch-nameyokigit switch branch-name - Branch’ni o‘chirish (birlashtirilmagan):
git branch -D branch-name - Qaysi branch’da ekaningizni ko‘rish:
git status
Muammolarni bartaraf etish
Agar o‘zgarishlaringizni asosiy branch’da ko‘rmasangiz, yodda tuting: bitta branch’dagi o‘zgarishlar siz ularni birlashtirmaguningizcha o‘sha yerda qoladi.
Branch’ni o‘chirishda avval u birlashtirilganiga ishonch hosil qiling. Agar birlashtirilmagan branch’ni o‘chirishga urinsangiz, Git bunga yo‘l qo‘ymaydi.
Birlashtirilmagan branch’ni majburan o‘chirish uchun git branch -D branch-name buyrug‘idan foydalaning.
W3Schools Pathfinder
Yutuqlaringizni kuzating – bu bepul!

GitHub
Bitbucket
GitLab