Git: Branch
Z MiS
(Rozdíly mezi verzemi)
m (Při vytvoření větve se do ní nepřesuneme. Při checkoutu se soubory změní. Doplněno zobrazení vizualizace návaznosti větví.) |
(Přidáno git push --force) |
||
(Není zobrazena 1 mezilehlá verze od 1 uživatele.) | |||
Řádka 31: | Řádka 31: | ||
* Každý projekt na GitHubu má větev ''main''. V té by měl být nejaktuálnější použitélný kód. | * 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. | * 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 | ||
+ | * <code>pridani-menu-zakaznik</code>, <code>oprava_vypisu_do_logu</code> | ||
Řádka 43: | Řádka 49: | ||
== Vytvoření nové větve == | == Vytvoření nové větve == | ||
− | git branch '' | + | 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. | * 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 == | == Přepnutí do druhé větve == | ||
− | git checkout '' | + | 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. | * 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. | * Samozřejmě se kdykoli můžete stejným způsobem vrátit ke stávající větvi. | ||
Řádka 54: | Řádka 62: | ||
== Spojení dvou větví == | == Spojení dvou větví == | ||
− | + | ; Přepni do větve se změnami | |
− | git | + | 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 | ||
+ | <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 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 == | == 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