Git: Branch
Z MiS
(Rozdíly mezi verzemi)
(Přidáno smazání již nepotřebné větve, přepracováno na použití rebase místo merge, příklady názvů větví, git checkout -b přidán.) |
(Přidáno git push --force) |
||
Řádka 62: | Řádka 62: | ||
== Spojení dvou větví == | == Spojení dvou větví == | ||
+ | ; Přepni do větve se změnami | ||
git checkout ''vetev_se_zmenami'' | git checkout ''vetev_se_zmenami'' | ||
+ | |||
; Nejprve spojte snímky ve větvi se změnami do jednoho snímku | ; Nejprve spojte snímky ve větvi se změnami do jednoho snímku | ||
− | * Tento krok můžete sice vynechat, ale všechny dílčí commity bychom tím přenesli do hlavní větve, což | + | * Tento krok můžete sice vynechat, ale všechny dílčí commity bychom tím přenesli do hlavní větve, což by způsobilo nepřehlednost hlavní větve. |
+ | * Proto provedeme: | ||
git rebase -i ''cilova_vetev'' | git rebase -i ''cilova_vetev'' | ||
− | * Celou historii této větve tím shrneme do jednoho commitu (nebo několika commitů) | + | * Celou historii této větve tím shrneme do jednoho commitu (nebo několika málo commitů). |
− | + | ||
+ | * Nyní musíme vyřešit kolize mezi naší a cílovou větví ve všech souborech, kde nastaly. | ||
+ | * Otevřete tyto soubory v editoru a vyberte správnou variantu textu. | ||
+ | |||
+ | * Dokončíme změny — větev se změnami nyní obsahuje všechen kód z této i cílové větve: | ||
git rebase --continue | git rebase --continue | ||
− | + | ||
+ | ; Upravenou historii naší větve nahrajeme do repozitáře: | ||
+ | git push --force | ||
+ | <div class="Varovani"> | ||
+ | <code>git push --force</code> nikdy neprovádějte ve větvi ''main''. Historii větve ''main'' byste neměli měnit! | ||
+ | </div> | ||
− | + | ; Přepněte se do cílové větve (obvykle ''main'') a připojte k ní obsah větve se změnami: | |
− | git | + | git checkout ''cilova_vetev'' |
− | + | git merge ''vetev_se_zmenami'' | |
Řádka 88: | Řádka 99: | ||
== Související stránky == | == Související stránky == | ||
* [[Git]], [[Git: Versioning]], [[Git: Repository]] | * [[Git]], [[Git: Versioning]], [[Git: Repository]] | ||
− | |||
== Zdroje == | == Zdroje == | ||
* [https://git-scm.com/book/cs/v2/V%C4%9Btve-v-syst%C3%A9mu-Git-V%C4%9Btve-v-kostce Git-Scm.com → Větve v kostce] | * [https://git-scm.com/book/cs/v2/V%C4%9Btve-v-syst%C3%A9mu-Git-V%C4%9Btve-v-kostce Git-Scm.com → Větve v kostce] |
Aktuální verze z 14. 12. 2020, 14:41
Obsah |
Git
- Git je jedním z nejoblíbenějších verzovacích systémů současnosti.
- Více o Gitu se dozvíte na stránce Git.
- Zde se budeme zabývat vytvářením větví a konkrétně postupem na serveru GitHub.com.
K čemu větve jsou
- Větve (branch) používejte pro dílčí úpravy, kdy musíte dočasně způsobit to, že kód nejde přeložit a spustit.
Příklad:
- Při přidání nového okna v aplikaci musím do jiných oken přidat odkazy na nové okno.
- To ale způsobí, že kód ostatních oken nepůjde přeložit, dokud nedokončím přidání nového okna.
- Proto nejprve vytvořím branch, v té provedu všechny související úpravy, a jakmile jde opět kód přeložit, nahraji ho (MERGE) zpět do větve main.
Mělo by vždy platit:
- 1 změna = 1 větev.
- Větev by měla existovat právě tak dlouho, jak dlouho provádím změnu. Po dokončení změny nahraji kód do větve main.
- Větev by měla být samostatná co nejkratší dobu. Po tuto dobu nemají ostatní členové týmu k dispozici kód větve a nemohou tedy reagovat na vytvářené změny.
Pojmenování větví
- Každý projekt na GitHubu má větev main. V té by měl být nejaktuálnější použitélný kód.
- Další větve by měly být pojmenovány tak, aby bylo jasné, jakou úpravu v rámci této větve provádíte.
- Místo mezer v názvu se obvykle používají podtržítka.
- Větve se obvykle pojmenovávají malými písmeny.
- Dejte si pozor na české znaky. Git bude používat kódování UTF-8, což může zlobit při zobrazování na Windows. Lze pojmenovávat bez diakritiky, nebo anglicky.
- Příklady
-
pridani-menu-zakaznik
,oprava_vypisu_do_logu
Zobrazení všech aktuálních větví
- Zobrazení názvů větví
git branch
- Zobrazení včetně vizualizace návazností
git log --oneline --decorate --graph --all
Vytvoření nové větve
git checkout -b nazev_nove_vetve
- Tento příkaz nás rovnou přepne do nové větve a můžeme pokračovat v práci v ní.
git branch nazev_nove_vetve
- Nová větev se vytvoří, ale zatím se do ní nepřesuneme. Zůstáváme stále ve stávající větvi.
Přepnutí do druhé větve
git checkout nazev_druhe_vetve
- Pozor! Soubory ve vašem lokálním repozitáři se upraví tak, aby jejich obsah odpovídal stavu druhé větve.
- Samozřejmě se kdykoli můžete stejným způsobem vrátit ke stávající větvi.
Spojení dvou větví
- Přepni do větve se změnami
git checkout vetev_se_zmenami
- Nejprve spojte snímky ve větvi se změnami do jednoho snímku
- Tento krok můžete sice vynechat, ale všechny dílčí commity bychom tím přenesli do hlavní větve, což by způsobilo nepřehlednost hlavní větve.
- Proto provedeme:
git rebase -i cilova_vetev
- Celou historii této větve tím shrneme do jednoho commitu (nebo několika málo commitů).
- Nyní musíme vyřešit kolize mezi naší a cílovou větví ve všech souborech, kde nastaly.
- Otevřete tyto soubory v editoru a vyberte správnou variantu textu.
- Dokončíme změny — větev se změnami nyní obsahuje všechen kód z této i cílové větve:
git rebase --continue
- Upravenou historii naší větve nahrajeme do repozitáře
git push --force
git push --force
nikdy neprovádějte ve větvi main. Historii větve main byste neměli měnit!
- Přepněte se do cílové větve (obvykle main) a připojte k ní obsah větve se změnami
git checkout cilova_vetev git merge vetev_se_zmenami
Smazání již nepotřebné větve
- Po sloučení změn do cílové větve již můžeme stávající větev smazat:
git branch -d vetev_se_zmenami
- Pokud bychom některé změny neměli sloučené, Git by nás upozornil a větev by nesmazal.
- Poté můžeme smazat větev i ve vzdáleném repozitáři:
git push origin --delete vetev_se_zmenami
Související stránky