logo

Git Rebase

Ponovno baziranje je postopek za ponovno uporabo potrditev na vrhu drugega osnovnega potovanja. Uporablja se za uporabo zaporedja objav iz različnih vej v končno objavo. Je alternativa ukazu git merge. Gre za linearen proces združevanja.

V Gitu je izraz rebase označen kot postopek premikanja ali združevanja zaporedja potrditev v novo osnovno potrditev. Ponovno baziranje je zelo koristno in je vizualiziralo proces v okolju delovnega toka razvejanja funkcij.

Preden združite vejo, je dobro, da jo znova postavite.

Git Rebase

Na splošno je alternativa ukazu git merge. Spajanje je vedno zapis, ki se spreminja naprej. Rebase je primerjalno prepričljivo orodje za prepisovanje zgodovine v git. Eno za drugo združuje različne objave.

Recimo, da ste opravili tri potrditve v svoji glavni veji in tri v drugi veji z imenom test. Če to združite, bo združilo vse objave v določenem času. Toda če ga ponovno postavite, bo združen na linearen način. Razmislite o spodnji sliki:

Git Rebase

Zgornja slika opisuje, kako deluje git rebase. Tri objave glavne veje so linearno združene s potrditvami testne veje.

Združevanje je najpreprostejši način za integracijo vej. Izvaja trosmerno spajanje med dvema zadnjima potrditvama veje.

Kako ponovno bazirati

Ko ste naredili nekaj potrditev na veji funkcij (testna veja) in nekaj v glavni veji. Ponastavite lahko katero koli od teh vej. Uporabite ukaz git log za sledenje spremembam (zgodovina objave). Odjavite se do želene poslovalnice, ki jo želite ponovno postaviti. Zdaj izvedite ukaz rebase na naslednji način:

Sintaksa:

 $git rebase 

Če je v veji nekaj sporov, jih razrešite in izvedite spodnje ukaze za nadaljevanje sprememb:

 $ git status 

Uporablja se za preverjanje stanja,

 $git rebase --continue 

Zgornji ukaz se uporablja za nadaljevanje sprememb, ki ste jih naredili. Če želite preskočiti spremembo, lahko preskočite na naslednji način:

kolesce ne deluje
 $ git rebase --skip 

Ko je ponovno baziranje končano. Potisnite repozitorij na izvor. Za razumevanje ukaza git merge si oglejte spodnji primer.

Recimo, da imate podružnico test2 na katerem delate. Zdaj ste na veji test2 in naredili nekaj sprememb v datoteki projekta nova datoteka1.txt .

Dodajte to datoteko v repozitorij:

 $ git add newfile1.txt 

Zdaj potrdite spremembe. Uporabite spodnji ukaz:

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

Izhod bo videti tako:

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

Preklop veje na master:

 $ git checkout master 

Izhod:

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

Zdaj ste na glavni veji. Dodal sem spremembe v svojo datoteko, pravi nova datoteka.txt . Spodnji ukaz se uporablja za dodajanje datoteke v repozitorij.

 $ git add newfile.txt 

Zdaj potrdite datoteko za spremembe:

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

Izhod:

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

Če želite preveriti zgodovino dnevnika, izvedite spodnji ukaz.

dolžina niza bash
 $ git log --oneline 

Izhod:

Git Rebase

Kot lahko vidimo v zgodovini dnevnika, je v glavni veji nova potrditev. Kaj naj naredim, če želim znova postaviti svojo vejo test2? Oglejte si spodnji scenarij za ponovno bazo veje:

Rebase Branch

Če imamo veliko potrditev iz različnih vej in jih želimo združiti v eno. Da bi to naredili, imamo dve možnosti, ali ga lahko združimo ali ga ponovno baziramo. Dobro je preoblikovati svojo vejo.

Iz zgornjega primera smo se zavezali glavni veji in jo želimo ponovno postaviti na vejo test2. Poglejmo si spodnje ukaze:

 $ git checkout test2 

Ta ukaz vas bo preklopil na vejo test2 iz masterja.

Izhod:

 Switched to branch 'test2.' 

Zdaj ste na veji test2. Zato lahko vejo test2 ponovno osnovate z glavno vejo. Oglejte si spodnji ukaz:

 $ git rebase master 

Ta ukaz bo ponovno osnoval vejo test2 in bo prikazan kot Uporaba: nova potrditev na veji test2 . Razmislite o spodnjem rezultatu:

Izhod:

Git Rebase

Git Interactive Rebase

Git olajša z Interactive Rebase; je močno orodje, ki omogoča različne operacije, kot je urediti, prepisati, preurediti, in več o obstoječih zavezah. Interactive Rebase je mogoče upravljati samo v trenutno odjavljeni veji. Zato nastavite svojo lokalno HEAD vejo na stransko vrstico.

Git interaktivno rebase lahko prikličete z ukazom rebase, samo vnesite -jaz skupaj z ukazom rebase. tukaj ' jaz ' pomeni interaktivno. Sintaksa tega ukaza je podana spodaj:

Sintaksa:

 $ git rebase -i 

Navedel bo vse razpoložljive interaktivne možnosti.

Izhod:

Git Rebase

Po danem rezultatu se odpre urejevalnik z razpoložljivimi možnostmi. Razmislite o spodnjem rezultatu:

Izhod:

Git Rebase

Ko izvedemo ukaz git interactive rebase, bo odprl vaš privzeti urejevalnik besedil z zgornjim rezultatom.

Možnosti, ki jih vsebuje, so navedene spodaj:

niz v c
  • Pick
  • Preoblikovati
  • Uredi
  • Squash
  • Popravi
  • Izv
  • Zlom
  • Spustite
  • Oznaka
  • Ponastaviti
  • Spoji

Zgornje možnosti izvajajo svoje posebne naloge z git-rebase. Na kratko razumemo vsako od teh možnosti.

Izberi (-p):

Pick tukaj pomeni, da je potrditev vključena. Vrstni red potrditev je odvisen od vrstnega reda ukazov izbire med ponovno bazo. Če ne želite dodati objave, morate izbrisati celotno vrstico.

Prebesedi (-r):

Prebeseda je precej podobna ukazu pick. Možnost preoblikovanja je zaustavila postopek ponovne postavitve in nudi možnost spremembe sporočila o potrditvi. Ne vpliva na nobene spremembe, ki jih naredi objavo.

Urejanje(a):

Možnost urejanja omogoča spreminjanje objave. Spreminjanje pomeni, zaveze je mogoče dodati ali v celoti spremeniti. Prav tako lahko naredimo dodatne potrditve pred ukazom za nadaljevanje rebase. Omogoča nam, da razdelimo veliko objavo na manjšo objavo; poleg tega lahko odstranimo napačne spremembe, narejene v objavi.

Squash (-i):

Možnost squash vam omogoča združevanje dveh ali več objav v eno objavo. Omogoča nam tudi pisanje novega sporočila o potrditvi za opis sprememb.

Popravek (-f):

Je precej podoben ukazu squash. Zavrglo je sporočilo objave, ki naj se združi. Za opis obeh sprememb se uporablja starejše sporočilo o potrditvi.

Exec (-x):

Možnost exec vam omogoča zagon poljubnih lupinskih ukazov proti objavi.

Premor (-b):

Možnost preloma ustavi ponovno baziranje na pravem mestu. Pozneje bo nadaljeval s preosnovo z ' git rebase --nadaljuj ' ukaz.

Spusti (-d):

Možnost spusti se uporablja za odstranitev objave.

Oznaka (-l):

Možnost oznake se uporablja za označevanje trenutnega položaja glave z imenom.

Ponastavi (-t):

Možnost ponastavitve se uporablja za ponastavitev glave na oznako.

java zamenja vse

GitMerge proti Rebase

Najpogostejše zagonetno vprašanje za uporabnike git je, kdaj uporabiti ukaz merge in kdaj uporabiti rebase. Oba ukaza sta podobna in oba se uporabljata za združevanje potrditev, ki jih naredijo različne veje repozitorija.

Ponovno baziranje ni priporočljivo v veji v skupni rabi, ker bo postopek rebasiranja ustvaril nedosledna skladišča. Za posameznike je ponovna osnova lahko bolj uporabna kot združevanje. Če želite videti celotno zgodovino, morate uporabiti spajanje. Merge sledi celotni zgodovini potrditev, medtem ko rebase prepiše novo.

Ukazi Git rebase se imenujejo alternativa git merge. Vendar pa imajo nekaj ključnih razlik:

Git Merge Git Rebase
Spajanje ustvari končno objavo ob spajanju. Git rebase ne ustvari nobene objave pri ponovnem baziranju.
Vse objave združi v eno samo objavo. Ustvari linearno sled potrditev.
Ustvari grafično zgodovino, ki je morda nekoliko zapletena za razumevanje. Ustvari linearno zgodovino, ki jo je mogoče zlahka razumeti.
Varno je združiti dve veji. Git 'rebase' obravnava težke operacije.
Združevanje je mogoče izvesti na javnih in zasebnih vejah. Napačna izbira je uporaba prebaziranja na javnih vejah.
Spajanje integrira vsebino veje funkcije z glavno vejo. Glavna veja je torej spremenjena, zgodovina veje funkcij pa ostane dosledna. Ponovno baziranje glavne veje lahko vpliva na vejo funkcije.
Združevanje ohranja zgodovino. Ponovno baziranje na novo piše zgodovino.
Git merge predstavi vse konflikte hkrati. Git rebase predstavlja konflikte enega za drugim.