Git

Vadnica za Git Rebase

Vadnica za Git Rebase

Začetnike Gita svari pred ukazom rebase. In upravičeno. Z vsemi novimi stvarmi, ki se jih je treba naučiti, je začetnikom verjetno bolje, da obvladajo osnovne koncepte, preden se poglobijo v zapletenosti prenove. Če pa razumete osnove združevanja vej, vam lahko znanje o ponovni uporabi pomaga rešiti nekaj zapletenih razvojnih ugank, ko pride pravi čas.

Git Rebase: Definicije

V skladu z dokumentacijo git bo ukaz rebase ponovno uporabil zaveze na vrhu druge osnovne konice. Ta definicija je morda nekoliko zastrašujoča. Lažje je razložiti rebase kot postopek, ki doda spremembe trenutne veje na rep druge veje. Pojdimo skozi primer, da dobimo boljšo predstavo o tem, kaj se zgodi.

Primer ponovne uporabe Git

V tem primeru bomo najprej ustvarili testni primer z vejico 'master' in 'feature'. Potem bomo naredili standardno združitev. Nato bomo znova ustvarili testni primer in izvedli ponovno zbirko podatkov in združitev.

1. Ustvarjanje podružnic Master in Feature

Tukaj je scenarij, ki ga bomo ustvarili:

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

V zgornjem primeru gremo po naslednji poti:

  1. Obvezi A: dodamo a.txt v veji 'master'
  1. Obvezi B: dodamo b.txt v veji 'master'
  1. Na tej stopnji ustvarimo vejo "element", kar pomeni, da bo imela.txt in b.txt
  1. Obveži C: dodamo c.txt v veji 'master'
  1. Pojdimo na vejo 'funkcija'
  1. Obvezi E: spremenimo a.txt v veji 'feature'
  1. Obveznost F: spremenimo b.txt v veji 'feature'

Ustvarite lahko mapo in v njej zaženete naslednjo kodo, da ustvarite zgornjo situacijo:

git init touch a.txt git add -A git commit -m "Obvezi A: dodano a.txt "dotaknite se b.txt git add -A git commit -m "Zavezi B: dodano b.txt "funkcija podružnice git dotik c.txt git add -A git commit -m "Zavezi C: dodano c.txt "git status git checkout feature echo aaa> a.txt git add -A git commit -m "Zavezi E: spremenjeno a.txt "echo bbb> b.txt git add -A git commit -m "Zavezi F: spremenjeno b.txt " 

2. Enostavno spajanje

Z ukazom log preverimo obe veji.

Rezultati za 'master':

$ git checkout master Preklopljen na vejo 'master' $ git log --oneline 2bbde47 Zaveza C: dodano c.txt b430ab5 Obvezi B: dodano b.txt 6f30e95 Obvezi A: dodano a.txt $ ls a.txt b.txt c.txt 

Rezultati za 'funkcija':

$ git checkout funkcija Preklopljeno na vejo 'feature' $ git log --oneline 0286690 Zavezi F: spremenjeno b.txt 7c5c85e Obvezi E: spremenjeno a.txt b430ab5 Obvezi B: dodano b.txt 6f30e95 Obvezi A: dodano a.txt $ ls a.txt b.txt 

Opazite, kako podružnica funkcije nima zaveze C

Zdaj pa zaženimo vejo 'feature' veje z 'master' vejo. Vnesti boste morali komentar. V komentar dodajte na začetku »Zavedi G:«, da bo lažje slediti.

$ git checkout master Preklopljeno na vejo 'master' $ git merge feature Spajanje, izvedeno s pomočjo 'rekurzivne' strategije. a.txt | 1 + b.txt | 1 + 2 datoteki spremenjeni, 2 vstavki (+) 

Rezultati za 'master':

 $ git checkout master Že v 'master' $ git log --oneline d086ff9 Zavezi G: Združi vejo 'funkcija' 0286690 Zavezi F: spremenjeno b.txt 7c5c85e Obvezi E: spremenjeno a.txt 2bbde47 Obvezi C: dodano c.txt b430ab5 Obvezi B: dodano b.txt 6f30e95 Obvezi A: dodano a.txt $ ls a.txt b.txt c.txt 

Rezultati za 'lastnost':

$ git checkout funkcija Preklopljeno na vejo 'feature' $ git log --oneline 0286690 Zavezi F: spremenjeno b.txt 7c5c85e Obvezi E: spremenjeno a.txt b430ab5 Obvezi B: dodano b.txt 6f30e95 Obvezi A: dodano a.txt $ ls a.txt b.txt 

V veji 'master' boste opazili, da gre za novo objavo G, ki je združila spremembe iz veje 'feature'. V bistvu se je zgodilo naslednje:

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

V zapisu G so bile vse spremembe iz podružnice 'element' vnesene v glavno vejo. Toda sama veja funkcije je zaradi postopka združevanja ostala nedotaknjena. Upoštevajte razpršitev vsake objave. Po združitvi imata zaveza E (7c5c85e) in F (0286690) isto razpršitev v veji 'feature' in 'master'.


3. Združitev s ponovnim ocenjevanjem

Ponovimo 1. korak, da znova ustvarimo veji 'master' in 'feature'.

Rezultati za 'master':

$ git checkout master Preklopljen na podružnico 'master' $ git log --oneline 7f573d8 Zavedi C: dodano c.txt 795da3c Obvezi B: dodano b.txt 0f4ed5b Obvezi A: dodano a.txt $ ls a.txt b.txt c.txt 

Rezultati za 'lastnost':

$ git checkout lastnost Preklopljeno na vejo 'feature' $ git log --oneline 8ed0c4e Zavezi F: spremenjeno b.txt 6e12b57 Zavezi E: spremenjeno a.txt 795da3c Obvezi B: dodano b.txt 0f4ed5b Obvezi A: dodano a.txt $ ls a.txt b.txt 

Prenovimo iz veje 'funkcija'.

$ git checkout lastnost Preklopljeno na vejo 'feature' $ git rebase master Najprej previjte glavo, da na vrhu predvajate svoje delo ... Uporaba: Zavezi E: spremenjeno.txt Uporaba: Obveznost F: spremenjeno b.txt 

Nato združite 'funkcijo' v 'master'.

$ git checkout master Preklopljen na vejo 'master' $ git merge feature Posodabljanje 7f573d8… 9efa1a3.txt | 1 + b.txt | 1 + 2 datoteki spremenjeni, 2 vstavki (+) 

Rezultati za podružnico 'master':

$ git checkout master Že v 'master' $ git log --oneline 9efa1a3 Zavezi F: spremenjeno b.txt 8710174 Zavezi E: spremenjeno a.txt 7f573d8 Obvezi C: dodano c.txt 795da3c Obvezi B: dodano b.txt 0f4ed5b Obvezi A: dodano a.txt $ ls a.txt b.txt c.txt 

Rezultati za vejo 'feature':

$ git checkout funkcija Preklopljeno na vejo 'feature' $ git log --oneline 9efa1a3 Zavezi F: spremenjeno b.txt 8710174 Zavezi E: spremenjeno a.txt 7f573d8 Obvezi C: dodano c.txt 795da3c Obvezi B: dodano b.txt 0f4ed5b Obvezi A: dodano a.txt $ ls a.txt b.txt c.txt 

Upoštevajte, da sta po ponovni zbirki in združitvi obe veji enaki. Prav tako sta se v obeh vejah spremenila razpršitvi za E in F. V bistvu se je v scenariju ponovne uporabe zgodilo naslednje:

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

Zato ni nove zaveze. Predpisi E in F so bili preračunani in pritrjeni na konec veje 'master'.

Preoblikovanje je koristno orodje, če želite počistiti zgodovino svojega dela. Vendar obstaja nevarnost, ki je rodila zlato pravilo.


Zlato pravilo ponovnega ocenjevanja

Zlato pravilo prerazporejanja je:

Nikoli ne preoblikujte javne podružnice.

Kot lahko vidite iz zgornjega primera, ponovna ocena preračuna zaveze. Ko se več ljudi razveja iz javnega repozitorija, lahko ponovna podlaga ustvari situacije, ko bodo razvijalci, ki so ustvarili nove veje, zašli v zelo zapletene situacije spajanja. Zato je dobro, da javnih podružnic, ki so v skupni rabi, nikoli ne preimenujete.

V zaključku:

Preoblikovanje je edinstvena lastnost Gita. A uporabljajte ga previdno.

Več informacij:

Tu je nekaj povezav za nadaljnje študije:

Git Rebase dokumentacija
Atlassian Merging vs Rebasing

Reference:

SuperTuxKart za Linux
SuperTuxKart je odličen naslov, zasnovan tako, da vam brezplačno ponuja izkušnjo Mario Kart v vašem sistemu Linux. Igrati je precej zahtevno in zabavn...
Vadnica za bitko za Wesnoth
Bitka za Wesnoth je ena izmed najbolj priljubljenih odprtokodnih strateških iger, ki jih lahko trenutno igrate. Ne samo, da se ta igra razvija že zelo...
0 A.D. Vadnica
Od številnih strateških iger tam 0 A.D. uspe izstopati kot izčrpen naslov in zelo globoka, taktična igra, čeprav je odprtokodna. Razvoj igre deluje ze...