Git: Branch

Z MiS
(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
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 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.)
Řá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 ''nazev-nove-vetve''
+
git checkout -b ''nazev_nove_vetve''
 +
* Tento příkaz nás rovnou přepne do nové větve a&nbsp;můžeme pokračovat v&nbsp;práci v&nbsp;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 ''nazev-druhe-vetve''
+
  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í ==
 +
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ž nechceme.
 +
git rebase -i ''cilova_vetev''
 +
* Celou historii této větve tím shrneme do jednoho commitu (nebo několika commitů).
 +
* Zároveň vyřešíme kolize mezi naší a&nbsp;cílovou větví ve všech souborech, kde nastaly.
 +
 +
git rebase --continue
 +
* Dokončíme změny &mdash; větev se změnami nyní obsahuje všechen kód z&nbsp;této i&nbsp;cílové větve.
 +
 
* Přepněte se do cílové větve (obvykle ''main'') a&nbsp;napište
 
* Přepněte se do cílové větve (obvykle ''main'') a&nbsp;napište
  git merge ''druha-vetev''
+
  git merge ''cilova_vetev''
 
* Obsah druhé větve se připojí ke stávající větvi.
 
* Obsah druhé větve se připojí ke stávající větvi.
  
 +
 +
== 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&nbsp;větev by nesmazal.
 +
 +
* Poté můžeme smazat větev i&nbsp;ve vzdáleném repozitáři:
 +
git push origin --delete ''vetev_se_zmenami''
  
  

Verze z 14. 12. 2020, 14:29


Obsah

Git


K čemu větve jsou

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í

Příklady


Zobrazení všech aktuálních větví

git branch
git log --oneline --decorate --graph --all


Vytvoření nové větve

git checkout -b nazev_nove_vetve
git branch nazev_nove_vetve


Přepnutí do druhé větve

git checkout nazev_druhe_vetve


Spojení dvou větví

git checkout vetev_se_zmenami
Nejprve spojte snímky ve větvi se změnami do jednoho snímku
git rebase -i cilova_vetev
git rebase --continue
git merge cilova_vetev


Smazání již nepotřebné větve

git branch -d vetev_se_zmenami
git push origin --delete vetev_se_zmenami


Související stránky


Zdroje

Osobní nástroje
Jmenné prostory
Varianty
Akce
Výuka
Navigace
Nástroje