Git

„Git Rebase“ pamoka

„Git Rebase“ pamoka

„Git“ pradedantieji įspėjami dėl pakartotinio paleidimo komandos. Ir teisingai. Turėdami visus naujus dalykus, pradedantieji tikriausiai geriau įsisavins pagrindines sąvokas, prieš įsigilindami į pakartotinio pritaikymo subtilybes. Tačiau, jei suprantate šakų sujungimo pagrindus, tada žinojimas, kaip iš naujo nustatyti bazę, gali padėti išspręsti kai kuriuos sudėtingus kūrimo galvosūkius, kai ateis tinkamas laikas.

Git Rebase: Apibrėžimai

Remiantis „git“ dokumentais, komanda „rebase“ bus pakartotinai taikoma ant kito bazinio patarimo. Šis apibrėžimas gali būti šiek tiek bauginantis. Lengviau paaiškinti pakartotinę bazę kaip procedūrą, pridedančią dabartinio šakos pokyčius prie kitos šakos. Apžvelkime pavyzdį, kad geriau suprastume, kas vyksta.

„Git Rebasing“ pavyzdys

Šiame pavyzdyje pirmiausia sukursime bandomąjį atvejį su „master“ ir „feature“ atšaka. Tada atliksime standartinį sujungimą. Tada mes atkursime bandomąjį atvejį ir atliksime pakartotinį įjungimą ir sujungimą.

1. Pagrindinių ir funkcinių skyrių kūrimas

Štai scenarijus, kurį sukursime:

A - B - C (pagrindinis) \ E - F (funkcija) 

Ankstesniame pavyzdyje mes einame tokiu keliu:

  1. Įsipareigoti A: pridedame a.txt failas „pagrindiniame“ filiale
  1. Įsipareigokite B: pridedame b.txt failas „pagrindiniame“ filiale
  1. Šiame etape mes sukuriame šakos „funkciją“, o tai reiškia, kad ji turės.txt ir b.txt
  1. Įsipareigokite C: pridedame c.txt failas „pagrindiniame“ filiale
  1. Mes einame į „funkcijų“ filialą
  1. Įsipareigokite E: modifikuojame a.txt filme „funkcija“
  1. Įsipareigokite F: modifikuojame b.txt filme „funkcija“

Norėdami sukurti aukščiau nurodytą situaciją, galite sukurti aplanką ir aplanke paleisti šį kodą:

git init paliesti a.txt git add -A git įsipareigoti -m "Įsipareigojimas A: pridėta a.txt "palieskite b.txt git pridėti -A git įsipareigoti -m "Įsipareigojimas B: pridėta b.txt "git filialo funkcija liesti c.txt git pridėti -A git įsipareigoti -m "Įsipareigojimas C: pridėta c.txt "git status git checkout feature echo aaa> a.txt git pridėti -A git įsipareigoti -m "Įsipareigojimas E: modifikuotas a.txt "aidas bbb> b.txt git pridėti -A git įsipareigoti -m "Įsipareigojimas F: modifikuotas b.txt " 

2. Paprastas sujungimas

Panaudokime žurnalo komandą abiem šakoms patikrinti.

Rezultatai pagal 'master':

$ git checkout master Perjungtas į filialo „master“ $ git log --oneline 2bbde47 Įvykdyti C: pridėta c.txt b430ab5 Įsipareigokite B: pridėta b.txt 6f30e95 įsipareigoti A: pridėta a.txt $ ls a.txt b.txt c.txt 

Rezultatai pagal „feature“:

$ git patikros funkcija Perjungta į filialo „funkciją“ $ git log --oneline 0286690 Įtraukti F: modifikuota b.txt 7c5c85e Įsipareigokite E: pakeista a.txt b430ab5 Įsipareigokite B: pridėta b.txt 6f30e95 įsipareigoti A: pridėta a.txt $ ls a.txt b.txt 

Atkreipkite dėmesį, kaip funkcijų šakoje nėra „Commit C“

Dabar paleiskime sujungimo „feature“ filialą su „master“ filialu. Jūsų bus paprašyta įvesti komentarą. Komentare pradžioje pridėkite „Įsipareigoti G:“, kad būtų lengviau stebėti.

$ git checkout master Perjungta į filialo „master“ $ git suliejimo funkciją „Recursive“ strategijos sujungimas. a.txt | 1 + b.txt | 1 + 2 failai pakeisti, 2 įterpimai (+) 

Rezultatai pagal 'master':

 $ git checkout master Jau yra „master“ $ git žurnale --oneline d086ff9 Įvykdyti G: Sujungti šakos funkciją „0286690“ Įvykdyti F: modifikuota b.txt 7c5c85e Įsipareigokite E: pakeista a.txt 2bbde47 Įsipareigokite C: pridėta c.txt b430ab5 Įsipareigokite B: pridėta b.txt 6f30e95 įsipareigoti A: pridėta a.txt $ ls a.txt b.txt c.txt 

Rezultatai pagal „feature“:

$ git patikros funkcija Perjungta į filialo „funkciją“ $ git log --oneline 0286690 Įvykdyti F: modifikuota b.txt 7c5c85e Įsipareigokite E: pakeista a.txt b430ab5 Įsipareigokite B: pridėta b.txt 6f30e95 įsipareigoti A: pridėta a.txt $ ls a.txt b.txt 

„Pagrindiniame“ filiale pastebėsite, kad yra naujas įsipareigojimas G, kuris sujungė „funkcijų“ šakos pakeitimus. Iš esmės buvo atlikti šie veiksmai:

A - B - C - G (pagrindinis) \ / E - F (funkcija) 

Programoje „Commit G“ visi pakeitimai iš „feature“ šakos buvo įtraukti į pagrindinį šaką. Tačiau pati „funkcijų“ šaka liko nepaliesta dėl sujungimo proceso. Atkreipkite dėmesį į kiekvieno įsipareigojimo maišos variantą. Po sujungimo „E“ (7c5c85e) ir „F“ (0286690) įsipareigojimas turi tą patį maišos „funkcija“ ir „pagrindinis“ šakoje.


3. Susijungimas su „Rebasing“

Pakartokime 1 veiksmą, kad vėl sukurtume „master“ ir „feature“ filialus.

Rezultatai pagal 'master':

$ git checkout master Perjungtas į filialo „master“ $ git log --oneline 7f573d8 Įvykdyti C: pridėta c.txt 795da3c Įsipareigokite B: pridėta b.txt 0f4ed5b įsipareigoti A: pridėta a.txt $ ls a.txt b.txt c.txt 

Rezultatai pagal „feature“:

$ git patikros funkcija Perjungta į šakos „funkciją“ $ git log --oneline 8ed0c4e Įtraukti F: modifikuota b.txt 6e12b57 Įsipareigokite E: pakeista a.txt 795da3c Įsipareigokite B: pridėta b.txt 0f4ed5b įsipareigoti A: pridėta a.txt $ ls a.txt b.txt 

Peržiūrėkime iš „funkcijų“ šakos.

$ git patikros funkcija Perjungta į filialo „funkciją“ $ git perkrovimo pagrindinė priemonė Pirmiausia persukdami galvą, kad galėtumėte pakartoti savo darbą ... Taikoma: Įvykdykite E: modifikuota a.txt Taikoma: Įsipareigokite F: pakeista b.txt 

Tada sujunkite „funkciją“ į „pagrindinę“.

$ git checkout master Perjungta į filialo „master“ $ git suliejimo funkciją Atnaujinama 7f573d8… 9efa1a3 Greitas pirmyn.txt | 1 + b.txt | 1 + 2 failai pakeisti, 2 įterpimai (+) 

Rezultatai pagal „master“ filialą:

$ git patikros meistras Jau yra „pagrindiniame“ $ git žurnale - linija 9efa1a3 Įsipareigokite F: modifikuota b.txt 8710174 Įsipareigokite E: pakeista a.txt 7f573d8 Įsipareigokite C: pridėta c.txt 795da3c Įsipareigokite B: pridėta b.txt 0f4ed5b įsipareigoti A: pridėta a.txt $ ls a.txt b.txt c.txt 

Rezultatai pagal „feature“ filialą:

$ git patikros funkcija Perjungta į šakos „funkciją“ $ git log --oneline 9efa1a3 Įvykdyti F: modifikuota b.txt 8710174 Įsipareigokite E: pakeista a.txt 7f573d8 Įsipareigokite C: pridėta c.txt 795da3c Įsipareigokite B: pridėta b.txt 0f4ed5b įsipareigoti A: pridėta a.txt $ ls a.txt b.txt c.txt 

Atkreipkite dėmesį, kad po perkrovimo ir sujungimo abi šakos yra vienodos. Taip pat abiejose šakose pasikeitė E ir F maišos. Iš esmės pakartotinio scenarijaus atveju taip atsitiko:

A - B - C \ E '- F' (funkcija, pagrindinis) 

Štai kodėl nėra naujo įsipareigojimo. E ir F įsipareigojimai buvo perskaičiuoti ir užfiksuoti iki „pagrindinio“ padalinio pabaigos.

„Rebasing“ yra naudinga priemonė, kai norite išvalyti savo darbo istoriją. Tačiau yra pavojus, dėl kurio atsirado auksinė taisyklė.


Auksinė pakartotinio vertinimo taisyklė

Auksinė pakartotinio įvertinimo taisyklė yra:

Niekada neperkraukite viešojo skyriaus.

Kaip matote iš aukščiau pateikto pavyzdžio, pakartotinai pritaikius veiksmus, perskaičiuojami įsipareigojimai. Kai keli žmonės dalijasi iš viešosios saugyklos, pakartotinis versijos nustatymas gali sukelti situacijas, kai kūrėjai, sukūrę naujus filialus, pateks į labai sudėtingas sujungimo situacijas. Taigi, gera idėja niekada neperduoti viešųjų padalinių, kurie yra bendri.

Apibendrinant:

„Rebasing“ yra unikali „Git“ savybė. Tačiau naudokite jį atsargiai.

Daugiau informacijos:

Čia pateikiamos kelios tolesnio tyrimo nuorodos:

„Git Rebase“ dokumentacija
„Atlassian“ susijungimas prieš „Rebasing“

Nuorodos:

Pridėkite pelės gestus prie „Windows 10“ naudodami šiuos nemokamus įrankius
Pastaraisiais metais kompiuteriai ir operacinės sistemos labai išsivystė. Buvo laikas, kai vartotojai turėjo naudoti komandas naršydami per failų tvar...
Valdykite ir valdykite pelės judėjimą tarp kelių „Windows 10“ monitorių
„Dual Display Mouse Manager“ leidžia jums valdyti ir konfigūruoti pelės judėjimą tarp kelių monitorių, sulėtinant jo judėjimą šalia sienos. „Windows 1...
„WinMouse“ leidžia tinkinti ir pagerinti pelės žymeklio judėjimą „Windows“ kompiuteryje
Jei norite pagerinti numatytąsias pelės žymiklio funkcijas, naudokite nemokamą programinę įrangą „WinMouse“. Tai prideda daugiau funkcijų, kurios padė...