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 rebase — bir 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 main — funksiya 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.