PHPPamokos.lt


14. Švaresnė atšakų istorija: "git rebase"

Dar viena procedūra, verta paminėjimo. Jau matėme, kaip veikia atšakos ("branches") ir vienos atšakos sujungimas su kita - git merge. Bet yra ir kitas sujungimo būdas - vadinamas rebase. Jis naudojamas rečiau, ir šioje trumpoje pamokoje paaiškinsiu skirtumus.

Esmė tokia: kai daromas git merge, tai Git sukuria dar vieną specialų commit'ą, kuriame ir atsispindi prijungimo pakeitimai. Ir tada išlieka visa pakeitimų istorija - kada buvo sukurta atšaka, kad ji prijungta prie master ar kitos pagrindinės atšakos ir t.t. O galbūt jūs norėtumėte, kad istorijoje tai fiksuotųsi kaip tiesiog vientisas procesas, be jokio prijungimo? Tam ir yra reikalingas rebase.

Jei vietoje git merge padarysite git rebase, tada istorija nuo "išsišakojimo" momento bus perrašyta, ir bus palikti commit'ai tarsi jie būtų vykę pagrindinėje atšakoje.

Sintaksės prasme, atkreipkite dėmesį, kad aktyvi atšaka turi būti ta, kurią kopijuosime, o rebase parametras turi būti atšaka, į kurią kopijuosime.
git checkout version2015
git rebase master
Šis kodas nukopijuos version2015 turinį at viršaus master atšakos - būtent toks veiksmas ir atliekamas dažniausiai.

Kaip ir merge atveju, Git sistema bando skirtumus pašalinti ir sujungti automatiškai, bet tai pavyksta ne visada - skirtumai gali būti per dideli. Analogiškai ir rebase variantas - gali kilti konfliktų, kuriuos jums teks spręsti "rankiniu būdu".

Svarbu: nenaudokite rebase komandos viešai prieinamoms atšakoms, ypač jei ten pakeitimus yra darę kiti žmonės. Nes tada jų pakeitimų istorija bus sužlugdyta - tada jūsų nekęs visą likusį gyvenimą. Kitaip tariant, rebase reikėtų atlikti tik lokaliame kompiuteryje esančioms atšakoms, jei tiesiog norite "švaresnės" istorijos. Bet ir tai - aš asmeniškai siūlyčiau pradedantiesiems rebase nenaudoti iš viso, o palikti repozitorijos istoriją tokią, kokia jinai ir buvo - su visais merge ir su visomis atšakomis, kad būtų aišku, kas kada ir ką darė.

Štai tiek trumpai apie rebase - gal kam ir prireiks, bet pats neagituoju naudoti.


(c) 2015-2018. Visais klausimais kreipkitės povilas@laraveldaily.com