Git

Kaip Git Rebase

Kaip Git Rebase
git rebase yra sujungimo įrankis, kaip ir susilieti. Tačiau jų darbo būdas yra kitoks.

Šiame straipsnyje aš kalbėsiu apie tai, kaip veikia „Git“ pakartotinė bazė, susilieja skirtumai tarp „Git“ pakartotinės bazės ir „Git“ ir kaip dirbti su „Git“ pakartotine baze. Taigi, pradėkime.

Git Rebase:

Tarkime, jūs turite „Git“ saugyklą su įsipareigojimais A, B, C viduje konors meistras atšaka. Tada sukūrėte naują filialą kažkas ir pridėjo 2 naujus įsipareigojimus D ir E į kažkas atšaka.

1 pav. Pradinė įsipareigojimų istorija.

Tarkime, pamiršote ką nors įtraukti į meistras atšaka. Taigi, grįšite į meistras filialas ir pridėkite naują įsipareigojimą G į meistras atšaka. Jūsų git istorija turėtų atrodyti taip.

2 pav. Įsipareigojimų istorija pridėjus įsipareigojimą G pagrindiniame filiale.

Viskas atrodo gerai. Dabar, jei norėtumėte visų pakeitimų, kuriuos atlikote kažkas filialas būti meistras filialą, galite sujungti kažkas atšaka į meistras atšaka. Tai kas git sujungti padaryti.

Ką daryti, jei norite įsipareigoti G būti prieinama kažkas atšaka? Na, tam galite naudoti „git rebase“.

Iš įsipareigojimų istorijos 2 paveiksle galite pamatyti tą šaką kažkas prasideda nuo įsipareigojimo C. Jei atliksite „git“ pakartotinę bazę kažkas, tada tai prasidėtų nuo įsipareigojimo G kaip parodyta žemiau 3 paveiksle. Atkreipkite dėmesį, kad įsipareigojimo turinys D ir E pasikeis ir po pakartotinės bazės operacijos. Įsipareigoja D ir E apims įsipareigojimo pakeitimus G. Štai kodėl aš pridūriau * simbolis prieš įsipareigojant D ir E.

Jei norite sužinoti, kaip įsipareigojimų istorija atrodytų, jei ją sujungčiau, pažvelkite į 4 pav. Aš įtraukiau jį tik tam, kad galėtumėte palyginti su „git“ pakartotine baze.

4 paveikslas: atlikite istoriją, jei buvo naudojamas git suliejimas.

Dabar, kai žinote, kas yra „git rebase“, skirtumas tarp „git“ perkėlimo iš naujo ir „git“ susijungimo ir kodėl jis naudojo „git“ iš naujo, aš parodysiu, kaip jį naudoti kitame šio straipsnio skyriuje žemiau.

„Git Rebase“ darbo eiga:

Šiame skyriuje aš sukursiu naują „git“ saugyklą savo vietiniame kompiuteryje ir parodysiu, kaip veikia „git“ iš naujo. Aš rekomenduoju jums gerai suprasti „git rebase“, prieš pritaikydami jį savo projekte.

Pirmiausia sukurkite naują „Git“ saugyklą rebase-demo / kompiuteryje taip:

$ git init iš naujo paleiskite demonstracinę versiją

Dabar eikite į rebase-demo / katalogą taip:

$ cd perkrauti demonstracinę versiją /

Dabar sukurkite naują failą testas.txt taip:

$ echo "A"> testas.txt

Testas.txt faile yra tik viena eilutė A. Tarkime, tai yra jūsų pradinis projekto kodas.

Dabar atlikite pakeitimus taip:

$ git pridėti .
$ git įsipareigojimas -m „A“

Dabar pridėkite kitą eilutę B į testas.txt failą, kaip parodyta toliau pateiktoje ekrano kopijoje.

Dabar atlikite pakeitimus taip:

$ git pridėti .
$ git įsipareigojimas -m 'B'

Dabar pridėkime dar vieną C eilutę testas.txt failą.

Be to, atlikite pakeitimus taip:

$ git pridėti .
$ git įsipareigojimas -m „C“

Dabar pagrindinės šakos įsipareigojimų istorija turėtų atrodyti taip:

$ git žurnalas - tiesioginis

Tarkime, jūs turite keletą naujų idėjų, kurias norite išbandyti. Taigi, sukurkime ir atsiskaitykime į naują filialą nauja funkcija taip:

$ git checkout -b nauja funkcija

Dabar pridėkite naują idėją (eilutė D tarkim) į testas.txt failą.

Dabar atlikite pakeitimus taip:

$ git pridėti .
$ git įsipareigoti -m 'D'

Dabar pridėkite E eilutę prie testas.txt failą.

Atlikite pakeitimus taip:

$ git pridėti .
$ git įsipareigoti -m 'E'

Dabar įsipareigokite nauja funkcija filialas turėtų atrodyti taip:

$ git žurnalas - tiesioginis

Pažiūrėkite, kaip vykdomi įsipareigojimai A tvarka < B < C < D < E?

Dabar atsimenate, kad pamiršote ką nors pridėti prie meistras filialą, kuriame taip pat norėjote būti nauja funkcija atšaka! Taigi, atsiskaitykite į meistras atšaka.

Pabaigoje pridėjau naują eilutę testas.txt failą, kaip matote.

Dabar atlikite pakeitimus taip:

$ git pridėti .
$ git įsipareigoti -m 'G'

Dabar įsipareigokite meistras filialas turėtų atrodyti taip.

A < B < C < G

Dabar, norėdami pakartoti įsipareigojimus iš meistras atšaka į nauja funkcija filialas, pirma kasa į nauja funkcija atšaka.

„$ git“ kasos nauja funkcija

Dabar atlikite „GIT“ atkūrimą meistras filialas taip:

$ git perkrovimo meistras

Kai kurie sujungia konfliktą! Pataisykime tai.

Na, pakeitimai, kuriuos padariau įsipareigojime G ir D yra tarpusavyje prieštaringi. Noriu išlaikyti abu šiuos dalykus.

Ištaisęs susijungimo konfliktą, testas.txt failas turėtų atrodyti taip:

Dabar pridėkite pakeitimus į sustojimo sritį taip:

$ git pridėti .

Dabar tęskite perkėlimą taip:

$ git rebase - tęskite

Kitas susijungiantis konfliktas! Na, taip gali atsitikti. „Rebase“ keičia „git“ įsipareigojimų istoriją. Taigi, tikimasi tokių dalykų.

Panašu, kad sujungimo procesas nepavyko dėl kai kurių tuščių eilučių. Pataisykime tai.

Ištaisęs susijungimo konfliktą, testas.txt failas turėtų atrodyti taip.

Dabar pridėkite pakeitimus į sustojimo sritį taip:

$ git pridėti .

Dabar tęskite perkrovimo operaciją taip:

$ git rebase - tęskite

„Git“ perkrovimas baigtas.

Kaip matote, atnaujinama naujos funkcijos šakos įsipareigojimų istorija. Dabar įsipareigojimų istorija yra tokia:

A < B < C < G < D < E

Kaip tikėtasi.

Galutinis testas.txt failas turėtų atrodyti taip.

„Git rebase“ yra galingas įrankis. Tačiau niekada neturėtumėte jo naudoti bendrose „Git“ saugyklose. Naudokite jį tik „Git“ saugyklose, kuriose dirbate tik jūs. Priešingu atveju kelyje susidursite su daugybe problemų.

Taigi, taip jūs naudojate „git rebase“. Dėkojame, kad perskaitėte šį straipsnį.

„OpenTTD“ ir „Simutrans“
Sukurti savo transporto modeliavimą gali būti smagu, atpalaiduojanti ir be galo viliojanti. Štai kodėl jūs turite įsitikinti, kad išbandėte kuo daugia...
„OpenTTD“ pamoka
„OpenTTD“ yra vienas iš populiariausių verslo modeliavimo žaidimų. Šiame žaidime turite sukurti nuostabų transporto verslą. Tačiau pradėsite nuo mažda...
„SuperTuxKart“, skirta „Linux“
„SuperTuxKart“ yra puikus pavadinimas, sukurtas nemokamai suteikti „Mario Kart“ patirtį jūsų „Linux“ sistemoje. Tai gana sudėtinga ir smagu žaisti, yr...