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 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 ''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í ==
* Přepněte se do cílové větve (obvykle ''main'') a&nbsp;napište
+
; Přepni do větve se změnami
  git merge ''druha-vetev''
+
  git checkout ''vetev_se_zmenami''
* Obsah druhé větve se připojí ke stávající větvi.
+
  
 +
; 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&nbsp;cílovou větví ve všech souborech, kde nastaly.
 +
* Otevřete tyto soubory v&nbsp;editoru a&nbsp;vyberte správnou variantu textu.
 +
 +
* 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:
 +
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&nbsp;připojte k&nbsp;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&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''
  
  
 
== 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 &rarr; Větve v&nbsp;kostce]
 
* [https://git-scm.com/book/cs/v2/V%C4%9Btve-v-syst%C3%A9mu-Git-V%C4%9Btve-v-kostce Git-Scm.com &rarr; Větve v&nbsp;kostce]

Aktuální verze z 14. 12. 2020, 14:41


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í

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
git rebase -i cilova_vetev
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

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