Git

Výukový program Git Rebase

Výukový program Git Rebase

Začátečníci Gitu jsou varováni před příkazem rebase. A oprávněně. Se všemi novými věcmi, které je třeba se naučit, je začátečníkům pravděpodobně lépe zvládnout základní pojmy, než se ponoří do složitosti rebasingu. Pokud však rozumíte základům slučování větví, pak znalost rebase vám může pomoci vyřešit některé složité vývojové hádanky, až přijde správný čas.

Git Rebase: Definice

Podle dokumentace git příkaz rebase znovu použije potvrzení nad jiným základním hrotem. Tato definice může být trochu skličující. Je snazší vysvětlit rebase jako postup, který přidává změny aktuální větve na konec jiné větve. Projdeme si příklad, abychom získali lepší představu o tom, co se stane.

Příklad Git Rebasing

V tomto příkladu nejprve vytvoříme testovací případ s větví „hlavní“ a „funkce“. Pak provedeme standardní sloučení. Dále vytvoříme testovací případ a provedeme rebase a sloučení.

1. Vytváření hlavních a větví funkcí

Zde je scénář, který vytvoříme:

A - B - C (hlavní) \ E - F (funkce) 

Ve výše uvedeném příkladu se vydáme následující cestou:

  1. Commit A: přidáme a.Soubor txt ve větvi „master“
  1. Commit B: přidáme b.Soubor txt ve větvi „master“
  1. V této fázi vytvoříme větev „feature“, což znamená, že bude mít.txt a b.txt
  1. Commit C: přidáme c.Soubor txt ve větvi „master“
  1. Přejdeme do větve „funkce“
  1. Commit E: upravíme a.txt ve větvi „feature“
  1. Commit F: upravíme b.txt ve větvi „feature“

Můžete vytvořit složku a spustit následující kód uvnitř složky k vytvoření výše uvedené situace:

git init touch a.txt git add -A git commit -m "Commit A: přidáno a.txt "dotek b.txt git add -A git commit -m "Commit B: přidáno b.txt "git branch feature touch c.txt git add -A git commit -m "Commit C: přidáno c.txt "git status git checkout funkce echo aaa> a.txt git add -A git commit -m "Commit E: změněno a.txt "echo bbb> b.txt git add -A git commit -m "Commit F: změněno b.txt " 

2. Jednoduché sloučení

Pomocí příkazu log zkontrolujeme obě větve.

Výsledky pro 'master':

$ git checkout master Přepnuto na větev 'master' $ git log - online 2bbde47 Commit C: přidáno c.txt b430ab5 Commit B: přidáno b.txt 6f30e95 Potvrdit A: přidáno a.txt $ ls a.txt b.txt c.txt 

Výsledky pro 'feature':

$ git funkce pokladny Přepnuto na větev 'funkce' $ git log - online 0286690 Commit F: upravené b.txt 7c5c85e Commit E: změněno a.txt b430ab5 Commit B: přidáno b.txt 6f30e95 Potvrdit A: přidáno a.txt $ ls a.txt b.txt 

Všimněte si, že větev funkcí nemá Commit C

Nyní pojďme spustit sloučení větve 'feature' s větví 'master'. Budete požádáni o zadání komentáře. Do komentáře na začátek přidejte „Commit G:“, aby bylo sledování snazší.

$ git checkout master Přepnuto na větev 'master' $ git funkce sloučení Sloučení provedené 'rekurzivní' strategií. A.txt | 1 + b.txt | 1 + 2 soubory změněny, 2 vložení (+) 

Výsledky pro 'master':

 $ git checkout master Již na 'master' $ git log - online d086ff9 Commit G: sloučit větev 'feature' 0286690 Commit F: změněno b.txt 7c5c85e Commit E: změněno a.txt 2bbde47 Commit C: přidáno c.txt b430ab5 Commit B: přidáno b.txt 6f30e95 Potvrdit A: přidáno a.txt $ ls a.txt b.txt c.txt 

Výsledky pro 'feature':

$ git funkce pokladny Přepnuto na větev 'funkce' $ git log - online 0286690 Commit F: upravené b.txt 7c5c85e Commit E: změněno a.txt b430ab5 Commit B: přidáno b.txt 6f30e95 Potvrdit A: přidáno a.txt $ ls a.txt b.txt 

Ve větvi „hlavní“ si všimnete, že existuje nová revize G, která sloučila změny z větve „funkce“. V zásadě došlo k následující akci:

A - B - C - G (hlavní) \ / E - F (funkce) 

V Commit G byly všechny změny z větve 'feature' přeneseny do větve master. Samotná větev „funkce“ však zůstala nedotčena kvůli procesu sloučení. Všimněte si hash každého potvrzení. Po sloučení má potvrzení E (7c5c85e) a F (0286690) stejný hash na větvi 'feature' a 'master'.


3. Sloučení s rebasingem

Zopakujme krok 1, abychom znovu vytvořili větve „hlavní“ a „funkce“.

Výsledky pro 'master':

$ git checkout master Přepnuto na větev 'master' $ git log - online 7f573d8 Commit C: přidáno c.txt 795da3c Commit B: přidáno b.txt 0f4ed5b Commit A: přidáno a.txt $ ls a.txt b.txt c.txt 

Výsledky pro 'feature':

Funkce $ git checkout Přepnuto na větev „funkce“ $ git log - online 8ed0c4e Commit F: upravené b.txt 6e12b57 Commit E: změněno a.txt 795da3c Commit B: přidáno b.txt 0f4ed5b Commit A: přidáno a.txt $ ls a.txt b.txt 

Pojďme rebase z 'funkce' větev.

Funkce $ git checkout Přepnuto na větev „feature“ $ git rebase master Nejprve převiňte hlavu, aby se vaše práce přehrála navíc… Použití: Potvrdit E: upraveno a.txt Použití: Potvrdit F: změněno b.txt 

Poté sloučte 'funkci' do 'hlavní'.

$ git checkout master Přepnuto na větev 'master' $ git slučovací funkce Aktualizace 7f573d8… 9efa1a3 Rychlý posun vpřed.txt | 1 + b.txt | 1 + 2 soubory změněny, 2 vložení (+) 

Výsledky pro 'hlavní' větev:

$ git checkout master Již na 'master' $ git log - online 9efa1a3 Commit F: upravené b.txt 8710174 Commit E: změněno a.txt 7f573d8 Commit C: přidáno c.txt 795da3c Commit B: přidáno b.txt 0f4ed5b Commit A: přidáno a.txt $ ls a.txt b.txt c.txt 

Výsledky pro větev 'feature':

$ git checkout feature Přepnuto na větev 'feature' $ git log - online 9efa1a3 Commit F: upravené b.txt 8710174 Commit E: změněno a.txt 7f573d8 Commit C: přidáno c.txt 795da3c Commit B: přidáno b.txt 0f4ed5b Commit A: přidáno a.txt $ ls a.txt b.txt c.txt 

Všimněte si, že po rebase a sloučení jsou obě větve stejné. Také hashe pro E a F se změnily v obou větvích. V zásadě se ve scénáři rebase stalo toto:

A - B - C \ E '- F' (funkce, hlavní) 

Proto zde není žádný nový závazek. Závazky E a F byly přepočítány a přidrženy na konci větve „master“.

Rebasing je užitečný nástroj, pokud chcete vyčistit historii své práce. Existuje však nebezpečí, které způsobilo zrod zlatého pravidla.


Zlaté pravidlo rebasingu

Zlaté pravidlo rebasingu je:

Nikdy nevyměňujte veřejné pobočky za nové.

Jak vidíte z výše uvedeného příkladu, rebasing přepočítá revize. Když se z veřejného úložiště větví více lidí, rebasing může vytvořit situace, kdy vývojáři, kteří vytvořili nové pobočky, narazí na velmi komplikované situace sloučení. Je tedy dobrý nápad nikdy rebragovat veřejné pobočky, které jsou sdílené.

Závěrem:

Rebasing je jedinečná vlastnost Gitu. Používejte jej však opatrně.

Více informací:

Zde je několik odkazů pro další studium:

Dokumentace Git Rebase
Atlassian Merging vs Rebasing

Reference:

Hry Nainstalujte si nejnovější Dolphin Emulator pro Gamecube a Wii na Linuxu
Nainstalujte si nejnovější Dolphin Emulator pro Gamecube a Wii na Linuxu
Emulátor Dolphin vám umožní hrát vybrané hry Gamecube a Wii na osobních počítačích se systémem Linux (PC). Jako volně dostupný herní emulátor s otevř...
Hry Jak používat GameConqueror Cheat Engine v Linuxu
Jak používat GameConqueror Cheat Engine v Linuxu
Tento článek popisuje průvodce používáním cheatovacího modulu GameConqueror v systému Linux. Mnoho uživatelů, kteří hrají hry v systému Windows, často...
Hry Nejlepší emulátory herních konzolí pro Linux
Nejlepší emulátory herních konzolí pro Linux
Tento článek uvádí seznam populárního softwaru pro emulaci herních konzolí, který je k dispozici pro Linux. Emulace je vrstva softwarové kompatibility...