Git

Git Rebase apmācība

Git Rebase apmācība

Git iesācēji tiek brīdināti par komandu atsākt. Un pamatoti. Ņemot vērā visas jaunās lietas, kas jāapgūst, iesācējiem, iespējams, ir labāk apgūt pamatjēdzienus, pirms iedziļināties atkārtotas bāzēšanas sarežģījumos. Tomēr, ja jūs saprotat filiāļu apvienošanas pamatus, tad, zinot, kā atkārtoti izveidot bāzi, varēsiet atrisināt sarežģītas attīstības mīklas, kad pienāks īstais laiks.

Gita Rebase: Definīcijas

Saskaņā ar git dokumentāciju rebase komanda atkārtoti apņemas rīkoties virs cita bāzes gala. Šī definīcija varētu būt nedaudz biedējoša. Vieglāk ir izskaidrot atkārtotu bāzēšanu kā procedūru, kas pašreizējās filiāles izmaiņas pievieno citas filiāles astei. Apskatīsim piemēru, lai gūtu labāku priekšstatu par notiekošo.

Git Rebasing piemērs

Šajā piemērā vispirms izveidosim testa gadījumu ar “master” un “feature” atzarojumu. Tad mēs veiksim standarta apvienošanu. Tālāk mēs atjaunosim testa gadījumu un veiksim atkārtotu bāzēšanu un apvienošanu.

1. Meistaru un iezīmju zaru veidošana

Šis ir scenārijs, kuru mēs izveidosim:

A - B - C (galvenais) \ E - F (līdzeklis) 

Iepriekš minētajā piemērā mēs ejam šādu ceļu:

  1. Apņemties A: mēs pievienojam a.txt fails “master” filiālē
  1. Apņemties B: mēs pievienojam b.txt fails “master” filiālē
  1. Šajā posmā mēs izveidojam filiāles “funkciju”, kas nozīmē, ka tai būs.txt un b.txt
  1. Apņemties C: mēs pievienojam c.txt fails “master” filiālē
  1. Mēs ejam uz filiāli “iezīme”
  1. Apņemties E: mēs mainām a.txt filiālē “iezīme”
  1. Apņemties F: mēs modificējam b.txt filiālē “iezīme”

Jūs varat izveidot mapi un palaist šādu kodu mapē, lai izveidotu iepriekš minēto situāciju:

git init pieskāriens a.txt git add -A git saistīt -m "Commit A: pievienots a.txt "pieskarieties b.txt git pievienot -A git izdarīt -m "Saistība B: pievienota b.txt "git filiāles iezīme pieskarties c.txt git add -A git saistīt -m "Commit C: pievienots c.txt "git status git checkout feature echo aaa> a.txt git add -A git saistīt -m "Commit E: modificēts a.txt "echo bbb> b.txt git pievienot -A git izdarīt -m "Apņemties F: modificēts b.txt " 

2. Vienkārša sapludināšana

Izmantosim žurnāla komandu, lai pārbaudītu abas filiāles.

Rezultāti vaicājumam 'master':

$ git checkout master Pārslēdzās uz filiāles “master” $ git log --oneline 2bbde47 Apņemšanās C: pievienota c.txt b430ab5 Apņemties B: pievienots b.txt 6f30e95 Apņemties A: pievienots a.txt $ ls a.txt b.txt c.txt 

Rezultāti vaicājumam 'feature':

$ git norēķinu funkcija Pārslēgta uz filiāles “iezīme” $ git log --oneline 0286690 Apņemšanās F: modificēta b.txt 7c5c85e Apņemties E: modificēts a.txt b430ab5 Apņemties B: pievienots b.txt 6f30e95 Apņemties A: pievienots a.txt $ ls a.txt b.txt 

Ievērojiet, kā funkciju atzaram nav Commit C

Tagad palaidīsim apvienot “feature” filiāli ar “master” filiāli. Jums tiks lūgts ievadīt komentāru. Lai to būtu vieglāk izsekot, sākumā komentārā pievienojiet “Commit G:”.

$ git checkout master Pārslēdzās uz filiāles “master” $ git sapludināšanas funkciju Apvienošana, ko veica “rekursīvā” stratēģija. a.txt | 1 + b.txt | 1 + 2 faili mainīti, 2 ievietojumi (+) 

Rezultāti vaicājumam 'master':

 $ git checkout master Jau ir “master” $ git log --oneline d086ff9. Apņemties G: apvienot filiāles funkciju.txt 7c5c85e Apņemties E: modificēts a.txt 2bbde47 Apņemties C: pievienots c.txt b430ab5 Apņemties B: pievienots b.txt 6f30e95 Apņemties A: pievienots a.txt $ ls a.txt b.txt c.txt 

Rezultāti vaicājumam 'feature':

$ git norēķinu funkcija Pārslēgta uz filiāles “iezīme” $ git log --oneline 0286690 Apņemšanās F: modificēta b.txt 7c5c85e Apņemties E: modificēts a.txt b430ab5 Apņemties B: pievienots b.txt 6f30e95 Apņemties A: pievienots a.txt $ ls a.txt b.txt 

Filiālā “master” pamanīsit, ka ir jauns apņemšanās G, kas ir apvienojis izmaiņas no filiāles “feature”. Būtībā ir notikusi šāda darbība:

A - B - C - G (galvenais) \ / E - F (līdzeklis) 

Programmā Commit G visas izmaiņas no “feature” atzara ir ieviestas galvenajā filiālē. Bet apvienošanās procesa dēļ filiāle pati par sevi nav palikusi neskarta. Ievērojiet katras saistības hash. Pēc apvienošanās E (7c5c85e) un F (0286690) saistītājiem ir vienāda jaucēja iezīmei “iezīme” un “galvenais”.


3. Apvienošanās ar Rebasing

Atkārtosim 1. darbību, lai atkal izveidotu filiāles “master” un “feature”.

Rezultāti vaicājumam 'master':

$ git checkout master Pārslēdzās uz filiāles “master” $ git log --oneline 7f573d8 Apņemšanās C: pievienota c.txt 795da3c Saistīt B: pievienots b.txt 0f4ed5b Apņemties A: pievienots a.txt $ ls a.txt b.txt c.txt 

Rezultāti vaicājumam 'feature':

$ git norēķinu funkcija Pārslēgta uz filiāles “iezīme” $ git log --oneline 8ed0c4e Apņemties F: modificēts b.txt 6e12b57 Apņemties E: modificēts a.txt 795da3c Saistīt B: pievienots b.txt 0f4ed5b Apņemties A: pievienots a.txt $ ls a.txt b.txt 

Atkārtoti bāzēsimies no “feature” filiāles.

$ git norēķinu funkcija Pārslēgta uz filiāles “funkciju” $ git rebase master Vispirms pārtiniet galvu, lai atkārtotu savu darbu virs tā ... Pieteikšanās: Commit E: modificēts a.txt Pieteikšanās: apņemieties F: modificēts b.txt 

Pēc tam sapludiniet funkciju “master”.

$ git checkout master Pārslēdzies uz filiāles “master” $ git sapludināšanas funkciju Atjauninot 7f573d8… 9efa1a3 Ātri uz priekšu.txt | 1 + b.txt | 1 + 2 faili mainīti, 2 ievietojumi (+) 

Rezultāti vaicājumam 'master' branch:

$ git Checkout master Jau ir “master” $ git log - online 9efa1a3. Apņemties F: modificēts b.txt 8710174 Apņemties E: modificēts a.txt 7f573d8 Apņemties C: pievienots c.txt 795da3c Saistīt B: pievienots b.txt 0f4ed5b Apņemties A: pievienots a.txt $ ls a.txt b.txt c.txt 

Rezultāti vaicājumam 'feature':

$ git norēķinu funkcija Pārslēgta uz filiāles “iezīme” $ git log --oneline 9efa1a3 Apņemties F: modificēts b.txt 8710174 Apņemties E: modificēts a.txt 7f573d8 Apņemties C: pievienots c.txt 795da3c Saistīt B: pievienots b.txt 0f4ed5b Apņemties A: pievienots a.txt $ ls a.txt b.txt c.txt 

Ievērojiet, ka pēc atkārtotas bāzes un apvienošanas abas filiāles ir vienādas. Abās filiālēs ir mainījušās arī E un F hashes. Būtībā atkārtotas bāzes scenārijā tas notika:

A - B - C \ E '- F' (iezīme, galvenais) 

Tāpēc nav jaunas saistības. E un F saistības ir pārrēķinātas un fiksētas līdz “galvenā” atzara beigām.

Pārveidošana ir noderīgs rīks, kad vēlaties iztīrīt sava darba vēsturi. Tomēr pastāv briesmas, kas ir radījušas zelta likumu.


Pārvērtēšanas zelta likums

Pārvērtēšanas zelta likums ir:

Nekad nepārveidojiet publisko filiāli.

Kā redzat no iepriekš minētā piemēra, atkārtoti veicot atkārtotu aprēķinu, tiek veiktas saistības. Kad vairāki cilvēki sazarojas no publiskā repozitorija, atkārtota bāzēšana var radīt situācijas, kurās izstrādātāji, kas izveidojuši jaunas filiāles, nonāk ļoti sarežģītās apvienošanās situācijās. Tāpēc ir ieteicams nekad nepārveidot kopīgas publiskās filiāles.

Noslēgumā:

Rebasing ir unikāla Git iezīme. Bet izmantojiet to piesardzīgi.

Vairāk informācijas:

Šeit ir dažas saites turpmākam pētījumam:

Git Rebase dokumentācija
Atlassian Merging vs Rebasing

Atsauces:

Kā nomainīt peles kreiso un labo pogu operētājsistēmā Windows 10
Tas ir diezgan normāli, ka visas datora peles ierīces ir ergonomiski izstrādātas lietotājiem ar labo roku. Bet ir pieejamas peles ierīces, kas ir īpaš...
Atdariniet peles klikšķus, virzot kursoru, izmantojot operētājsistēmā Windows 10 bezklikšķu peli
Peles vai tastatūras lietošana nepareizā pozā, ja to lieto pārmērīgi daudz, var izraisīt daudz veselības problēmu, tostarp spriedzi, karpālā kanāla si...
Pievienojiet peles žestus operētājsistēmai Windows 10, izmantojot šos bezmaksas rīkus
Pēdējos gados datori un operētājsistēmas ir ievērojami attīstījušās. Bija laiks, kad lietotājiem bija jāizmanto komandas, lai pārvietotos pa failu pār...