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:
- Kohustage A: lisame a.txt-fail harus 'master'
- Kohustage B: lisame b.txt-fail harus 'master'
- Selles etapis loome haru "funktsiooni", mis tähendab, et sellel on.txt ja b.txt
- Tehke C: lisame c.txt-fail harus 'master'
- Me läheme filiaali "funktsioon"
- Kohustage E: muudame a.txt 'funktsiooni' harus
- 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:
- https: // www.atlasslane.com / git / õpetused / merging-vs-rebasing
- Versioonikontroll Git-07-ga - taaskäivitage [https: // www.Youtube.com / watch?v = cSf8cO0WB4o]
- https: // git-scm.com / docs / git-rebase
- Mis on Git rebase? [https: // www.Youtube.com / watch?v = TymF3DpidJ8]
- https: // keskmine.freecodecamp.org / git-rebase-ja-kuldreegel-selgitatud-70715eccc372