Git

Výukový program pre Git Rebase

Výukový program pre Git Rebase

Začiatočníci Gitu sú varovaní pred príkazom rebase. A oprávnene. Vďaka všetkým novým veciam, ktoré sa treba naučiť, je pre začiatočníkov pravdepodobne lepšie ovládať základné pojmy, než sa ponoriť do zložitostí rebasingu. Ak však rozumiete základom zlučovania pobočiek, potom vám bude vedieť, ako rebázovať, pomôcť vyriešiť niektoré zložité vývojové hádanky, keď príde vhodný čas.

Git Rebase: Definície

Podľa dokumentácie git príkaz rebase znovu použije potvrdenie nad iným základným hrotom. Táto definícia môže byť trochu odstrašujúca. Je jednoduchšie vysvetliť rebase ako postup, ktorý pridáva zmeny aktuálnej vetvy na koniec inej vetvy. Poďme si prejsť príkladom, aby sme mali lepšiu predstavu o tom, čo sa stane.

Príklad Git Rebasing

V tomto príklade najskôr vytvoríme testovací prípad s vetvou „master“ a „feature“. Potom urobíme štandardné zlúčenie. Ďalej znova vytvoríme testovací prípad a vykonáme rebase a zlúčenie.

1. Vytváranie hlavných a hlavných vetiev

Tu je scenár, ktorý vytvoríme:

A - B - C (hlavný) \ E - F (funkcia) 

Vo vyššie uvedenom príklade sa uberáme nasledujúcou cestou:

  1. Commit A: pridáme a.súbor txt vo vetve „hlavný“
  1. Commit B: pridáme b.súbor txt vo vetve „hlavný“
  1. V tejto fáze vytvoríme vetvu „funkcia“, čo znamená, že bude mať.txt a b.TXT
  1. Commit C: pridáme c.súbor txt vo vetve „hlavný“
  1. Prejdeme do pobočky „feature“
  1. Odovzdať E: upravíme a.txt vo vetve „feature“
  1. Odovzdať F: upravíme b.txt vo vetve „feature“

Môžete vytvoriť priečinok a spustiť nasledujúci kód v priečinku, ktorý vytvorí vyššie uvedenú situáciu:

git init dotyk a.txt git add -A git commit -m "Commit A: pridané a.txt „dotyk b.txt git add -A git commit -m "Commit B: pridané b.txt "dotyk gitovej vetvy c.txt git add -A git commit -m "Commit C: pridané c.txt "git status git checkout funkcia echo aaa> a.txt git add -A git commit -m "Commit E: upravené a.txt "echo bbb> b.txt git add -A git commit -m "Commit F: upravené b.TXT" 

2. Jednoduché zlúčenie

Pomocou príkazu log skontrolujeme obe vetvy.

Výsledky pre 'master':

$ git checkout master Prepnuté na vetvu 'master' $ git log - online 2bbde47 Commit C: pridané c.txt b430ab5 Commit B: pridané b.txt 6f30e95 Commit A: pridané a.txt $ ls a.txt b.txt c.TXT 

Výsledky pre 'feature':

Funkcia pokladnice $ git Prepnutá na vetvu 'funkcia' $ git log - online 0286690 Commit F: upravené b.txt 7c5c85e Potvrdiť E: upravené a.txt b430ab5 Commit B: pridané b.txt 6f30e95 Commit A: pridané a.txt $ ls a.txt b.TXT 

Všimnite si, ako vetva funkcií nemá Commit C

Teraz spustíme zlúčenie vetvy „feature“ s vetvou „master“. Zobrazí sa výzva na zadanie komentára. Do komentára pridajte na začiatok text „Commit G:“, ktorý uľahčí sledovanie.

$ git checkout master Prepnuté na vetvu 'master' $ git funkcia zlúčenia Zlúčenie vykonané 'rekurzívnou' stratégiou. a.txt | 1 + b.txt | 1 + 2 súbory zmenené, 2 vloženia (+) 

Výsledky pre 'master':

 $ git checkout master Už na 'master' $ git log - online d086ff9 Commit G: Zlúčiť vetvu 'feature' 0286690 Commit F: upravené b.txt 7c5c85e Potvrdiť E: upravené a.txt 2bbde47 Commit C: pridané c.txt b430ab5 Commit B: pridané b.txt 6f30e95 Commit A: pridané a.txt $ ls a.txt b.txt c.TXT 

Výsledky pre 'feature':

Funkcia pokladne $ git Prepnutá na „funkciu“ pobočky $ git log - online 0286690 Commit F: upravené b.txt 7c5c85e Potvrdiť E: upravené a.txt b430ab5 Commit B: pridané b.txt 6f30e95 Commit A: pridané a.txt $ ls a.txt b.TXT 

V pobočke „master“ si všimnete, že existuje nový príkaz G, ktorý zlúčil zmeny z vetvy „feature“. V zásade sa uskutočnili tieto kroky:

A - B - C - G (hlavný) \ / E - F (funkcia) 

Vo Commit G boli všetky zmeny z vetvy 'feature' vykonané do hlavnej vetvy. Samotná vetva „funkcie“ však zostala nedotknutá kvôli procesu zlúčenia. Všimnite si hash každého potvrdenia. Po zlúčení má potvrdenie E (7c5c85e) a F (0286690) rovnaký hash na vetve „feature“ a „master“.


3. Zlúčenie s rebazingom

Zopakujme krok 1, aby sme znovu vytvorili vetvy „hlavná“ a „vlastnosť“.

Výsledky pre 'master':

$ git checkout master Prepnuté na vetvu 'master' $ git log - online 7f573d8 Commit C: pridané c.txt 795da3c Commit B: pridané b.txt 0f4ed5b Commit A: pridané a.txt $ ls a.txt b.txt c.TXT 

Výsledky pre 'feature':

Funkcia pokladne $ git Prepnutá na „funkciu“ pobočky $ git log - online 8ed0c4e Commit F: upravené b.txt 6e12b57 Commit E: upravené a.txt 795da3c Commit B: pridané b.txt 0f4ed5b Commit A: pridané a.txt $ ls a.txt b.TXT 

Poďme rebázovať z vetvy „funkcia“.

Funkcia pokladne $ git Prepnutá na „funkciu“ pobočky $ git rebase master Najskôr previnutím hlavy prehrajte svoju prácu navrchu ... Aplikácia: Potvrdiť E: upravená a.Aplikácia txt: Commit F: upravené b.TXT 

Potom zlúčte „funkciu“ do „hlavnej“.

$ git checkout master Prepnuté na vetvu 'master' $ git zlúčenie funkcia Aktualizuje sa 7f573d8… 9efa1a3 Rýchly posun vpred.txt | 1 + b.txt | 1 + 2 súbory zmenené, 2 vloženia (+) 

Výsledky pre „hlavný“ obor:

$ git checkout master Už na 'master' $ git log - online 9efa1a3 Commit F: upravené b.txt 8710174 Commit E: upravené a.txt 7f573d8 Potvrdiť C: pridané c.txt 795da3c Commit B: pridané b.txt 0f4ed5b Commit A: pridané a.txt $ ls a.txt b.txt c.TXT 

Výsledky pre vetvu 'feature':

Funkcia pokladnice $ git Prepnutá na vetvu 'funkcia' $ git log - online 9efa1a3 Commit F: upravené b.txt 8710174 Commit E: upravené a.txt 7f573d8 Potvrdiť C: pridané c.txt 795da3c Commit B: pridané b.txt 0f4ed5b Commit A: pridané a.txt $ ls a.txt b.txt c.TXT 

Všimnite si, že po rebase a zlúčení sú obe vetvy rovnaké. V obidvoch vetvách sa zmenili aj hashe pre E a F. V zásade sa v scenári rebase stalo toto:

A - B - C \ E '- F' (funkcia, hlavný) 

Preto neexistuje žiadny nový záväzok. Záväzky E a F boli prepočítané a zablokované na koniec „hlavnej“ vetvy.

Rebasing je užitočný nástroj, keď chcete vyčistiť históriu svojej práce. Existuje však nebezpečenstvo, ktoré viedlo k vzniku zlatého pravidla.


Zlaté pravidlo rebazingu

Zlaté pravidlo rebasingu je:

Nikdy nevymieňajte postavenie verejnej pobočky.

Ako môžete vidieť z vyššie uvedeného príkladu, rebasing prepočíta záväzky. Keď z verejného úložiska odbočuje viac ľudí, rebasing môže vytvoriť situácie, keď vývojári, ktorí vytvorili nové pobočky, narazia na veľmi komplikované situácie pri zlučovaní. Je preto dobrý nápad nikdy nepremiestňovať verejné pobočky, ktoré sú zdieľané.

Na záver:

Rebasing je jedinečná vlastnosť Gitu. Používajte ho však opatrne.

Viac informácií:

Tu je niekoľko odkazov na ďalšie štúdium:

Dokumentácia Git Rebase
Atlassian Merging vs Rebasing

Referencie:

Ako zmeniť veľkosť, farbu a schému ukazovateľa myši a kurzora v systéme Windows 10
Ukazovateľ myši a kurzor vo Windows 10 sú veľmi dôležité aspekty operačného systému. Dá sa to povedať aj pre iné operačné systémy, takže v skutočnosti...
Hry Zadarmo a open source herné motory pre vývoj hier pre Linux
Zadarmo a open source herné motory pre vývoj hier pre Linux
Tento článok sa bude zaoberať zoznamom bezplatných a otvorených herných nástrojov, ktoré možno použiť na vývoj 2D a 3D hier v systéme Linux. Existuje ...
Hry Výukový program Shadow of the Tomb Raider pre Linux
Výukový program Shadow of the Tomb Raider pre Linux
Shadow of the Tomb Raider je dvanásty prírastok do série Tomb Raider - franšíza akčných adventúr vytvorená Eidosom Montrealom. Túto hru prijali kritic...