Darsliklar GIT Rebase

GIT GIT Rebase

git rebase — tarmoq tarixini qayta tuzadigan ilg’or buyruq. merge ikki tarixni birlashtirsa, rebase bir tarmoqning commit’larini boshqasining ustiga “ko’chiradi” — natijada toza, chiziqli tarix hosil bo’ladi. Bu kuchli, ammo ehtiyotkorlik talab qiladigan vosita.

git rebasebir tarmoqning commit’larini boshqa tarmoqning eng so’nggi holati ustiga qayta joylaydigan buyruq. U tarixni chiziqli va toza qiladi.

rebase g’oyasi

Faraz qilaylik, funksiya tarmog’ida ishlayapsiz, shu orada main yangilandi. rebase sizning commit’laringizni main ning yangi holati ustiga ko’chiradi:

git switch funksiya
git rebase main
Successfully rebased and updated refs/heads/funksiya.

git rebase mainfunksiya commit’larini main ning eng so’nggi holati ustiga qayta joyladi. Endi funksiya go’yo main ning yangi versiyasidan boshlangandek ko’rinadi — tarix toza va chiziqli.

merge va rebase farqi

Ikki yondashuvni jadvalda solishtiramiz:

Xususiyat merge rebase
Tarix tarmoqli (birlashish nuqtasi) chiziqli, toza
Merge commit yaratadi yaratmaydi
Xavfsizlik xavfsiz ehtiyotkorlik kerak
Qachon umumiy tarmoqlarda shaxsiy tarmoqni yangilashda

merge tarixni aslida qanday bo’lgan bo’lsa saqlaydi, rebase esa uni chiroyli, chiziqli qilib qayta yozadi.

Oltin qoida

rebase ning eng muhim qoidasi: jamoa bilan bo’lishilgan (push qilingan) tarmoqni rebase qilmang. Chunki rebase commit’lar hash’ini o’zgartiradi — tarix qayta yoziladi. Agar boshqalar o’sha tarmoqda ishlayotgan bo’lsa, bu chalkashlik keltirib chiqaradi.

Holat Rebase mumkinmi?
Shaxsiy, hali push qilinmagan tarmoq Ha
Jamoa ishlatayotgan umumiy tarmoq Yo’q

Interaktiv rebase

rebase -i (interaktiv) commit’larni tahrirlash, birlashtirish yoki xabarini o’zgartirish imkonini beradi:

git rebase -i HEAD~3
pick a1b2c3d Birinchi
pick d4e5f6a Ikkinchi
pick 9f8e7d6 Uchinchi

rebase -i oxirgi 3 commit’ni tahrirlash oynasini ochdi. Bu yerda commit’larni birlashtirish (squash), tartibini o’zgartirish yoki o’chirish mumkin. Bu — tarixni “tozalash”ning kuchli vositasi, ammo faqat shaxsiy tarmoqlarda ishlating.

Xulosa

Bu bo’limda git rebase bilan tarixni qayta tuzishni, merge dan farqini, “oltin qoida”ni (push qilingan tarmoqni rebase qilmaslik) va interaktiv rebase’ni ko’rib chiqdik. Rebase — toza tarix uchun kuchli, ammo ehtiyotkor vosita. Keyingi darsda git remote bilan masofaviy repolarga o’tamiz.