Git

Git Rebase õpetus

Git Rebase õpetus

Giti algajaid hoiatatakse uuesti alustamise käsu eest. Ja õigustatult. Kõigi uute asjadega on algajatel tõenäoliselt parem põhimõisteid valdada, enne kui taaskäivitamise keerukustesse süüvida. Kui aga mõistate harude ühendamise põhitõdesid, aitab see, kuidas taaskäivitada, kui õige aeg saabub, keerulisi arendusmõistatusi lahendada.

Git Rebase: Mõisted

Git-dokumentatsiooni kohaselt rakendab käsk taaskäivitamine uuesti mõne teise baasiotsa kohal. See määratlus võib olla veidi hirmutav. Uuesti määramist on lihtsam seletada protseduurina, mis lisab praeguse haru muudatused teise haru sabale. Vaatame läbi näite, et saada parem ülevaade juhtunust.

Git uuesti näitamise näide

Selles näites loome kõigepealt testjuhtumi, millel on haru 'master' ja 'feature'. Siis teeme standardühenduse. Järgmisena loome uuesti proovijuhtumi ning teostame taaskasutuse ja ühendamise.

1. Põhi- ja funktsiooniharude loomine

Siin on stsenaarium, mille loome:

A - B - C (master) \ E - F (funktsioon) 

Ülaltoodud näites läheme järgmisele teele:

  1. Kohustage A: lisame a.txt-fail harus 'master'
  1. Kohustage B: lisame b.txt-fail harus 'master'
  1. Selles etapis loome haru "funktsiooni", mis tähendab, et sellel on.txt ja b.txt
  1. Tehke C: lisame c.txt-fail harus 'master'
  1. Me läheme filiaali "funktsioon"
  1. Kohustage E: muudame a.txt 'funktsiooni' harus
  1. Tehke F: muudame b.txt 'funktsiooni' harus

Ülaltoodud olukorra loomiseks võite luua kausta ja käivitada kaustas järgmise koodi:

git init puudutus a.txt git add -A git toime -m "Commit A: lisatud a.txt "puudutage b.txt git add -A git pühendu -m "Commit B: lisatud b.txt "git filiaali funktsioon puudutus c.txt git add -A git toime -m "Commit C: lisatud c.txt "git status git checkout funktsioon echo aaa> a.txt git add -A git toime -m "Commit E: muudetud a.txt "kaja bbb> b.txt git add -A git toime -m "Commit F: muudetud b.txt " 

2. Lihtne ühendamine

Kasutame mõlema haru kontrollimiseks logi käsku.

Tulemused otsingule 'master':

$ git checkout master Üleminek harule 'master' $ git log --oneline 2bbde47 Commit C: lisatud c.txt b430ab5 Kohustage B: lisage b.txt 6f30e95 Kohustus A: lisatud a.txt $ ls a.txt b.txt c.txt 

Tulemused otsingule 'feature':

Funktsioon $ git kassasse lülitati haru 'funktsioonile' $ git log --oneline 0286690 Kohustus F: muudetud b.txt 7c5c85e Kohustage E: muudetud a.txt b430ab5 Kohustage B: lisage b.txt 6f30e95 Kohustus A: lisatud a.txt $ ls a.txt b.txt 

Pange tähele, kuidas funktsiooniharul puudub Commit C

Nüüd käivitame 'feature' filiaali ühendamise haruga 'master'. Teil palutakse sisestada kommentaar. Kommentaaris lisage alguses "Commit G:", et oleks hõlpsam jälgida.

$ git checkout master Üleminek haru 'master' -le $ git ühendamise funktsioon 'Rekursiivse' strateegia abil tehtud ühendamine. a.txt | 1 + b.txt | 1 + 2 faili muudetud, 2 sisestust (+) 

Tulemused otsingule 'master':

 $ git checkout master Juba saidil „master” $ git log - on line d086ff9 Commit G: Merge filial 'feature' 0286690 Commit F: modifitseeritud b.txt 7c5c85e Kohustage E: muudetud a.txt 2bbde47 Kohustage C: lisage c.txt b430ab5 Kohustage B: lisage b.txt 6f30e95 Kohustus A: lisati a.txt $ ls a.txt b.txt c.txt 

Tulemused otsingule 'feature':

Funktsioon $ git kassasse lülitati haru 'funktsioonile' $ git log --oneline 0286690 Kohustus F: muudetud b.txt 7c5c85e Kohustage E: muudetud a.txt b430ab5 Kohustage B: lisage b.txt 6f30e95 Kohustus A: lisatud a.txt $ ls a.txt b.txt 

„Haldaja” harus märkate, et on olemas uus kohustus G, mis on ühendanud muudatused funktsioonist „haru”. Põhimõtteliselt on toimunud järgmine tegevus:

A - B - C - G (master) \ / E - F (funktsioon) 

Commit G-s on kõik muudatused funktsioonist harusse viidud põhiharu. Kuid funktsioonide haru ise on liitumisprotsessi tõttu puutumata jäänud. Pange tähele iga kohustuse räsi. Pärast ühendamist on E (7c5c85e) ja F (0286690) pühendamisel sama funktsioon räsitud funktsioonide ja põhiharude rühmas.


3. Ühinemine Rebaseerimisega

Kordame 1. sammu, et uuesti luua haru 'põhi' ja 'funktsioon'.

Tulemused otsingule 'master':

$ git checkout master Üleminek harule 'master' $ git log --oneline 7f573d8 Commit C: lisatud c.txt 795da3c Kohusta B: lisatud b.txt 0f4ed5b Kohustada A: lisatud a.txt $ ls a.txt b.txt c.txt 

Tulemused otsingule 'feature':

Funktsioon $ git kassasse lülitati haru 'funktsioonile' $ git log --oneline 8ed0c4e Kohustus F: muudetud b.txt 6e12b57 Kohusta E: muudetud a.txt 795da3c Kohusta B: lisatud b.txt 0f4ed5b Kohustada A: lisatud a.txt $ ls a.txt b.txt 

Alustame uuesti funktsiooni harust.

Funktsioon $ git kassasse lülitati haru 'funktsioonile' $ git taaskäivitus master Esiteks kerige pea tagasi, et oma tööd selle peal uuesti mängida ... Rakendamine: Commit E: muudetud a.txt Rakendamine: pühendage F: muudetud b.txt 

Seejärel ühendage funktsioon „master”.

$ git checkout master Üleminek haru 'master' -le $ git ühendamise funktsioon 7f573d8… 9efa1a3 värskendamine a.txt | 1 + b.txt | 1 + 2 faili muudetud, 2 sisestust (+) 

Tulemused 'master' filiaalile:

$ git checkout master Juba 'master''is $ git logis - oneline 9efa1a3 Commit F: muudetud b.txt 8710174 Kohusta E: muudetud a.txt 7f573d8 Kohustage C: lisati c.txt 795da3c Kohusta B: lisatud b.txt 0f4ed5b Kohustada A: lisatud a.txt $ ls a.txt b.txt c.txt 

Tulemused otsingule 'feature' branch:

Funktsioon $ git kassasse lülitati haru 'funktsioonile' $ git log --oneline 9efa1a3 Kohustus F: muudetud b.txt 8710174 Kohusta E: muudetud a.txt 7f573d8 Kohustage C: lisati c.txt 795da3c Kohusta B: lisatud b.txt 0f4ed5b Kohustada A: lisatud a.txt $ ls a.txt b.txt c.txt 

Pange tähele, et pärast uuesti alustamist ja ühendamist on mõlemad harud ühesugused. Samuti on mõlema haru jaoks muutunud räsid E ja F jaoks. Põhimõtteliselt juhtus ümberpaigutamise stsenaariumi korral nii:

A - B - C \ E '- F' (funktsioon, master) 

Sellepärast pole uut kohustust. E- ja F-kohustused on ümber arvutatud ja fikseeritud "peamise" haru lõpuni.

Taasalustamine on kasulik tööriist, kui soovite oma töö ajalugu puhastada. Siiski on oht, mis on sünnitanud kuldreegli.


Korduv reegeldamise reegel

Uuesti hindamise kuldreegel on:

Ära kunagi alusta avalikku haru uuesti.

Nagu ülaltoodud näitest näha, arvutab ümberpaigutamine toimingud ümber. Kui avalikust hoidlast hargneb mitu inimest, võib uuestibaasimine tekitada olukordi, kus uute harude loonud arendajad satuvad väga keerulistesse ühendamise olukordadesse. Niisiis, hea mõte ei ole ühiseid avalikke harusid kunagi uuesti alustada.

Kokkuvõtteks:

Rebaseerimine on Giti ainulaadne omadus. Kuid kasutage seda ettevaatlikult.

Rohkem informatsiooni:

Siin on mõned lingid edasiseks uurimiseks:

Git Rebase dokumentatsioon
Atlassian Merging vs Rebasing

Viited:

Kuidas muuta hiire ja puuteplaatide kerimise suund Windows 10-s ümber
Hiir ja PuuteplaatNeed muudavad arvutamise mitte ainult lihtsaks, vaid ka tõhusamaks ja vähem aeganõudvaks. Me ei kujuta ette elu ilma nende seadmetet...
Kuidas muuta hiirekursori ja kursori suurust, värvi ja skeemi Windows 10-s
Windows 10 hiirekursor ja kursor on operatsioonisüsteemi väga olulised aspektid. Seda võib öelda ka teiste opsüsteemide kohta, nii et tegelikult pole ...
Tasuta ja avatud lähtekoodiga mängumootorid Linuxi mängude arendamiseks
See artikkel hõlmab loetelu tasuta ja avatud lähtekoodiga mängumootoritest, mida saab kasutada 2D- ja 3D-mängude arendamiseks Linuxis. Selliseid mängu...