logo

Git Rebase

Atnaujinimas yra procesas, kuriuo pakartotinai taikomi įsipareigojimai kitos pagrindinės kelionės metu. Jis naudojamas norint pritaikyti įsipareigojimų seką iš skirtingų šakų į galutinį įsipareigojimą. Tai yra git merge komandos alternatyva. Tai linijinis susijungimo procesas.

„Git“ terminas „rebase“ vadinamas įsipareigojimų sekos perkėlimu arba sujungimu į naują bazinį įsipareigojimą. Perdirbimas yra labai naudingas ir vizualizavo procesą funkcijų šakojimo darbo eigos aplinkoje.

Prieš sujungiant filialą, verta jį iš naujo nustatyti.

Git Rebase

Paprastai tai yra git merge komandos alternatyva. Sujungimas visada yra į priekį besikeičiantis įrašas. Palyginimui, rebase yra patrauklus istorijos perrašymo įrankis git. Jis sujungia skirtingus įsipareigojimus po vieną.

Tarkime, kad atlikote tris įsipareigojimus pagrindinėje šakoje ir tris kitoje šakoje, pavadintoje testu. Jei tai sujungsite, visi įsipareigojimai bus sujungti vienu metu. Bet jei jį nustatysite iš naujo, jis bus sujungtas linijiniu būdu. Apsvarstykite toliau pateiktą vaizdą:

Git Rebase

Aukščiau pateiktame paveikslėlyje aprašoma, kaip veikia git rebase. Trys pagrindinės šakos įpareigojimai tiesiškai sujungiami su bandomosios šakos įsipareigojimais.

Sujungimas yra paprasčiausias būdas sujungti filialus. Jis atlieka trijų krypčių sujungimą tarp dviejų naujausių filialų įsipareigojimų.

Kaip Rebase

Kai kai kuriuos įsipareigojimus atlikote funkcijų šakoje (bandomojoje šakoje), o kai kuriuos - pagrindinėje šakoje. Galite iš naujo nustatyti bet kurią iš šių šakų. Norėdami sekti pakeitimus (įteikimo istoriją), naudokite komandą git log. Išsiregistruokite į norimą filialą, kurį norite iš naujo nustatyti. Dabar atlikite rebase komandą taip:

Sintaksė:

 $git rebase 

Jei šakoje yra kokių nors konfliktų, išspręskite juos ir atlikite toliau nurodytas komandas, kad tęstumėte pakeitimus:

 $ git status 

Jis naudojamas būklei patikrinti,

 $git rebase --continue 

Aukščiau pateikta komanda naudojama atlikti pakeitimus. Jei norite praleisti pakeitimą, galite praleisti taip:

np.argmax
 $ git rebase --skip 

Kai bus baigtas perdengimas. Perkelkite saugyklą į pradinę vietą. Apsvarstykite toliau pateiktą pavyzdį, kad suprastumėte git merge komandą.

Tarkime, kad turite filialą pasakyti testas2 su kuria dirbate. Dabar esate test2 filiale ir atlikote kai kuriuos projekto failo pakeitimus naujas failas1.txt .

Pridėti šį failą į saugyklą:

 $ git add newfile1.txt 

Dabar atlikite pakeitimus. Naudokite toliau pateiktą komandą:

 $ git commit -m 'new commit for test2 branch.' 

Išvestis atrodys taip:

 [test2 a835504] new commitfor test2 branch 1 file changed, 1 insertion(+) 

Perjungti šaką į pagrindinį:

 $ git checkout master 

Išvestis:

 Switched to branch 'master.' Your branch is up to date with 'origin/master.' 

Dabar esate pagrindinėje šakoje. Aš pridėjau pakeitimus į savo failą, sako naujas failas.txt . Žemiau pateikta komanda naudojama failui pridėti į saugyklą.

 $ git add newfile.txt 

Dabar nustatykite failo pakeitimus:

 $ git commit -m ' new commit made on the master branch.' 

Išvestis:

 [master 7fe5e7a] new commit made on master 1 file changed, 1 insertion(+) HiMaNshU@HiMaNshU-PC MINGW64 ~/Desktop/GitExample2 (master) 

Norėdami patikrinti žurnalo istoriją, atlikite toliau pateiktą komandą.

 $ git log --oneline 

Išvestis:

Git Rebase

Kaip matome žurnalo istorijoje, pagrindinėje šakoje yra naujas įsipareigojimas. Jei noriu pakeisti test2 šakos bazę, ką turėčiau daryti? Žr. toliau pateiktą rebase filialo scenarijų:

konvertuoti eilutę į int Java

Rebase filialas

Jei turime daug įsipareigojimų iš skirtingų šakų ir norime juos sujungti į vieną. Norėdami tai padaryti, turime du pasirinkimus: galime jį sujungti arba pakeisti. Gerai iš naujo nustatyti savo šaką.

Iš aukščiau pateikto pavyzdžio įsipareigojome naudoti pagrindinę šaką ir norime iš naujo nustatyti ją test2 šakoje. Pažiūrėkime toliau pateiktas komandas:

 $ git checkout test2 

Ši komanda įjungs pagrindinio įrenginio test2 šaką.

Išvestis:

 Switched to branch 'test2.' 

Dabar esate test2 šakoje. Taigi galite iš naujo nustatyti test2 šaką pagrindine šaka. Žiūrėkite žemiau esančią komandą:

 $ git rebase master 

Ši komanda iš naujo nustatys test2 šaką ir bus rodoma kaip Taikoma: naujas įsipareigojimas test2 šakai . Apsvarstykite toliau pateiktą išvestį:

Išvestis:

Git Rebase

Git Interactive Rebase

Git palengvina su Interactive Rebase; tai galingas įrankis, leidžiantis atlikti įvairias operacijas, pvz redaguoti, perrašyti, pertvarkyti, ir daugiau apie esamus įsipareigojimus. Interaktyvioji „Rebase“ gali būti naudojama tik šiuo metu išregistruotame filiale. Todėl šoninėje juostoje nustatykite vietinį HEAD filialą.

Git interactive rebase galima iškviesti naudojant rebase komandą, tiesiog įveskite -i kartu su rebase komanda. cia' i “ reiškia interaktyvų. Šios komandos sintaksė pateikta žemiau:

Sintaksė:

 $ git rebase -i 

Jame bus išvardytos visos galimos interaktyvios parinktys.

Išvestis:

Git Rebase

Po nurodytos išvesties bus atidarytas redaktorius su galimomis parinktimis. Apsvarstykite toliau pateiktą išvestį:

Išvestis:

Git Rebase

Kai atliksime interaktyvią git rebase komandą, ji atidarys numatytąjį teksto rengyklę su aukščiau pateikta išvestimi.

Jame esančios parinktys išvardytos toliau:

  • Pasirinkti
  • Perfrazuoti
  • Redaguoti
  • Skvošas
  • Pataisyti
  • Vykdytojas
  • Pertrauka
  • Numesti
  • Etiketė
  • Nustatyti iš naujo
  • Sujungti

Aukščiau pateiktos parinktys atlieka savo specifines užduotis su git-rebase. Supraskime kiekvieną iš šių variantų trumpai.

Pasirinkite (-p):

maven įdiegti

Čia pasirinkite stovus, į kuriuos įtraukiamas įsipareigojimas. Įsipareigojimų eiliškumas priklauso nuo paėmimo komandų eiliškumo per bazę. Jei nenorite pridėti įsipareigojimo, turite ištrinti visą eilutę.

Perfrazuoti (-r):

Perrašymas yra gana panašus į rinkimo komandą. Perrašymo parinktis pristabdė naujos bazės procesą ir suteikia galimybę pakeisti patvirtinimo pranešimą. Tai neturi įtakos jokiems įsipareigojimo pakeitimams.

Redaguoti (-ai):

Redagavimo parinktis leidžia pakeisti įsipareigojimą. Pakeitimo priemones, įsipareigojimus galima pridėti arba visiškai pakeisti. Taip pat galime atlikti papildomus įsipareigojimus prieš perrašydami tęsti komandą. Tai leidžia mums padalyti didelį įsipareigojimą į mažesnį įsipareigojimą; be to, galime pašalinti klaidingus įsipareigojimo pakeitimus.

Skvošas (-s):

Skvošo parinktis leidžia sujungti du ar daugiau įsipareigojimų į vieną įsipareigojimą. Tai taip pat leidžia mums parašyti naują įsipareigojimo pranešimą, kuriame aprašomi pakeitimai.

Pataisymas (-f):

Tai gana panaši į skvošo komandą. Ji atmetė pranešimą apie įsipareigojimą sujungti. Senesnis patvirtinimo pranešimas naudojamas apibūdinti abu pakeitimus.

Vykdymas (-x):

Exec parinktis leidžia paleisti savavališkas apvalkalo komandas prieš įsipareigojimą.

Pertrauka (-b):

Pertraukimo parinktis sustabdo pagrindą teisingoje padėtyje. Jis bus tęsiamas vėliau naudojant „ git rebase --tęsti ' komanda.

Nuleisti (-d):

Nuleidimo parinktis naudojama įsipareigojimui pašalinti.

Etiketė (-l):

Etiketės parinktis naudojama dabartinei galvos pozicijai pažymėti pavadinimu.

Atstatyti (-t):

Atkūrimo parinktis naudojama norint iš naujo nustatyti galvą prie etiketės.

egzempliorius java

„GitMerge“ prieš „Rebase“.

Dažniausias „git“ vartotojo mįslingas klausimas, kada naudoti komandą merge ir kada naudoti rebase. Abi komandos yra panašios ir abi naudojamos skirtingų saugyklos šakų įsipareigojimams sujungti.

Pakartotinis bazės nustatymas nerekomenduojamas bendrai naudojamoje šakoje, nes pakartotinio bazinio nustatymo procesas sukurs nenuoseklias saugyklas. Asmenims perskaičiavimas gali būti naudingesnis nei sujungimas. Jei norite pamatyti visą istoriją, turėtumėte naudoti sujungimą. Sujungimas seka visą įsipareigojimų istoriją, o rebase perrašo naują.

„Git rebase“ komandos buvo vadinamos „git merge“ alternatyva. Tačiau jie turi keletą esminių skirtumų:

Git Merge Git Rebase
Sujungimas sukuria galutinį įsipareigojimą sujungimo metu. Git rebase nesukuria jokių įsipareigojimų perrašant.
Jis sujungia visus įsipareigojimus kaip vieną įsipareigojimą. Tai sukuria linijinį įsipareigojimų seką.
Tai sukuria grafinę istoriją, kurią suprasti gali būti šiek tiek sudėtinga. Tai sukuria linijinę istoriją, kurią galima lengvai suprasti.
Sujungti dvi šakas yra saugu. Git „rebase“ sprendžia sunkią operaciją.
Sujungimas gali būti atliekamas tiek valstybiniuose, tiek privačiuose filialuose. Neteisingas pasirinkimas naudoti rebazavimą valstybinėse šakose.
Sujungus funkcijos šakos turinys integruojamas su pagrindine šaka. Taigi, pagrindinė šaka yra pakeista, o funkcijų šakos istorija išlieka nuosekli. Pagrindinės šakos atkūrimas gali turėti įtakos funkcijų šakai.
Sujungimas išsaugo istoriją. Pakartotinis pagrindas perrašo istoriją.
„Git merge“ pateikia visus konfliktus vienu metu. Git rebase konfliktus pateikia po vieną.