Větve umožňují pracovat na několika liniích vývoje v jednom projektu současně, aniž by si překážely. V článku zjistíte, co jsou větve a k čemu slouží, naučíte se je vytvářet a přepínat mezi nimi, slučovat změny a řešit konflikty pomocí nástrojů IDE. To jsou základy, díky kterým snáz pochopíte, co Claude Code dělá, když pracuje s vaším repozitářem v samostatné větvi.

Příklady a snímky rozhraní pocházejí z IDE JetBrains; názvy a umístění akcí se ve vaší verzi mohou lišit. Pro cvičení použijte samostatný výukový repozitář. V pracovním projektu dodržujte jeho pravidla pro větve, commitování a odesílání změn.

Co jsou větve a k čemu slouží

Větev pojmenovává samostatnou linii commitů. Jejím vytvořením se nekopíruje složka projektu ani se neukládají necommitované soubory. Při přepnutí Git v běžné pracovní složce upraví soubory podle zvolené větve; nedokončené změny mohou přejít s vámi, nebo přepnutí zablokovat.

Horní linie představuje main, dolní feature/new-idea. Po sloučení ukazuje main na M, který má dva rodiče: E a D.ABEMCD
Horní linie představuje main, dolní feature/new-idea. Po sloučení ukazuje main na M, který má dva rodiče: E a D.

Z hlavní větve main se oddělí nová větev feature/new-idea pro samostatnou linii vývoje. Po dokončení práce se sloučí zpět do main.

Představte si, že chcete ve svém projektu něco zásadně předělat nebo vyzkoušet riskantní změnu. Jak byste postupovali bez Gitu? Nejspíš byste zkopírovali celý projekt do nové složky a pracovali v ní. Pokud by se vám výsledek líbil, přesunuli byste ho do hlavní složky. Pokud ne, kopii byste jednoduše smazali.

Přirovnání ke kopii pomáhá představit si různé varianty práce, technicky je ale větev ukazatel na commit. Ukážeme si to na příkladu knihy:

  1. máte hotový rukopis (to je vaše hlavní větev main);
  2. chcete napsat alternativní konec (vytvoříte novou větev, například feature/new-idea);
  3. píšete nový konec, aniž zasáhnete do hlavního textu rukopisu (pracujete v nové větvi);
  4. pokud bude nový konec lepší, nahradíte jím původní (sloučíte větve pomocí merge);
  5. starý návrh s nepotřebným koncem můžete smazat (odstraníte větev).
Jak to souvisí s Claude Code

Požádejte Claude Code, aby nejprve ukázal větev a stávající změny. Samostatnou větev vytvořte, pokud to odpovídá pravidlům projektu. Uložené commity vám dávají bod návratu; samotné smazání názvu větve nevrátí změny v souborech ani neobnoví původní stav.

Vytvoření nové větve a práce v ní

Krok 1. Otevřete nabídku větví.

Na hlavním panelu nástrojů vedle názvu projektu je widget zobrazující název aktuální větve (ve výchozím stavu main). Klikněte na něj a zvolte + New Branch.

Widget větví v levém horním rohu

Krok 2. Pojmenujte novou větev.

Dobrou praxí je pojmenovat větev podle úkolu, na kterém pracujete. Například feature/add-usage-examples.

Okno pro vytvoření nové větve

Pokud při vytváření vyberete Checkout branch, IDE přepne na novou větev. Před úpravou souborů zkontrolujte její název ve widgetu.

Krok 3. Proveďte změny a vytvořte commit.

Přidejte do README.md sekci s příklady použití. Prohlédněte si změny a obvyklým způsobem vytvořte commit: v historii nové větve se objeví uložený snímek.

Commit v nové větvi
Jak to souvisí s Claude Code

Když Claude Code navrhne vytvořit commit, udělá přesně to: zaznamená aktuální změny jako bod, ke kterému se můžete později vrátit. Než souhlasíte, přečtěte si zprávu commitu. Popisuje, co se mění, a snadno ji upravíte.

Přepínání mezi větvemi

Změny s příklady použití máte bezpečně uložené ve větvi feature/add-usage-examples. Vraťme se do hlavní větve main a podívejme se, co v ní je.

Krok 1. Znovu klikněte na widget s názvem aktuální větve v levém horním rohu.

Krok 2. V seznamu Local nebo Recent vyberte větev main a v zobrazené podnabídce klikněte na Checkout.

Přepnutí na větev main

Krok 3. Zkontrolujte výsledek.

Po přepnutí otevřete soubor README.md. Sekci s příklady použití v něm nenajdete - zůstala v jiné větvi. Díky tomu můžete pracovat na nové funkci, aniž byste zasahovali do stabilní verze ve větvi main.

Soubor bez změn z jiné větve

Slučování větví

merge spojí historii vybrané větve s aktuální. Pokud se main od odvětvení neposunula, může dojít k fast-forward: main se přesune na C3 bez nového commitu. Pokud se linie rozešly, běžné sloučení vytvoří commit se dvěma rodiči.

main se přesune z C2 na C3 bez nového commituC1C2C3
main se přesune z C2 na C3 bez nového commitu

V tomto lineárním případě se main může přesunout na C3. Větev feature/add-usage-examples zatím také ukazuje na C3; její název kvůli sloučení mazat nemusíte.

Dokončili jste práci na svém úkolu ve větvi feature/add-usage-examples a chcete změny přidat do hlavního projektu.

Krok 1. Přepněte na cílovou větev.

Ujistěte se, že jste ve větvi, DO KTERÉ chcete změny přidat. V našem případě je to main.

Krok 2. Proveďte sloučení.

Znovu klikněte na widget správy větví. V seznamu vyberte větev, ZE KTERÉ chcete změny převzít (feature/add-usage-examples), a v podnabídce zvolte Merge 'feature/add-usage-examples' into 'main'.

Sloučení větví

Krok 3. Zkontrolujte výsledek.

V souboru README.md ve větvi main teď najdete svou novou sekci s příklady. Úspěšně jste sloučili svou práci s hlavní verzí projektu.

Úspěšné sloučení

Konflikty při slučování

Konflikt znamená, že Git nedokázal změny sloučit automaticky. Často jde o různé úpravy stejných řádků; může také nastat, že se soubor v jedné větvi smaže a ve druhé upraví. Řešení závisí na požadovaném výsledku.

Právě tady se hodí vestavěné nástroje vašeho IDE (CLion nebo IntelliJ IDEA). Řešit konflikty v terminálu není zrovna radost, ale vestavěný nástroj pro třístranné sloučení (3-way merge) z toho udělá přehledný a jednoduchý postup.

Dvě větve se společným předkem C1C1C2C3
Dvě větve se společným předkem C1

Od společného předka C1 přibyly v obou větvích nové commity.Samotné rozvětvení historie konflikt nezaručuje: nastane, pokud Git nedokáže změny sloučit automaticky. V následujícím cvičení nahradí různé texty stejný původní řádek.

Pojďme konflikt nasimulovat:

  1. ujistěte se, že jste ve větvi main a v okně Commit nemáte necommitované změny ani nové soubory;
  2. vytvořte novou větev feature/new-title, ale zatím na ni nepřepínejte. Zkontrolujte, že není zaškrtnutá volba Checkout branch;
  3. zatímco jste stále ve větvi main, změňte první řádek v README.md na "My Awesome Project" a vytvořte commit;
  4. přepněte na větev feature/new-title. První řádek v README.md tu zůstal původní - odpovídá stavu souboru při vytvoření větve. Změňte tentýž řádek na "My Super Project" a vytvořte commit;
  5. vraťte se do větve main a slučte do ní větev feature/new-title.

Git teď zjistí, že se v obou historiích změnilo stejné místo. Zobrazí okno pro řešení konfliktu (Merge Conflicts).

Okno s nalezenými konflikty

Kliknutím na tlačítko Merge otevřete nástroj pro řešení konfliktů. Uvidíte v něm:

  • vlevo (Your changes) - verzi souboru z aktuální větve, do které slučujete (main);
  • vpravo (Changes from branch) - verzi souboru ze slučované větve;
  • uprostřed (Result) - výslednou verzi souboru, kterou sestavíte ručně.
Třístranné okno pro řešení konfliktů

Kliknutím na šipky >> nebo << (případně na křížky pro odmítnutí) můžete přijmout jednu z verzí jako celek. Správný text můžete také napsat přímo do prostředního panelu.

Zkontrolujte výsledek v prostředním panelu a klikněte na Apply nebo na odpovídající tlačítko pro dokončení. Potom zkontrolujte stav Gitu: pokud sloučení ještě není commitnuté, vytvořte commit v IDE. Vyřešení konfliktních řádků a dokončení merge jsou dva různé kroky. Ověřte, že výsledný kód funguje správně.

Jak to souvisí s Claude Code

Pokud při práci s Claude Code dojde ke konfliktu, nejde o selhání: Claude se může zastavit a požádat vás o pomoc nebo navrhnout, jak změny rozplést. Vyřešíte ho stejným třístranným nástrojem IDE jako běžný konflikt.

Proč někdy ke konfliktu nedojde

Pokud při cvičení konflikt nevznikne, zkontrolujte, od kterého commitu byla druhá větev vytvořena a zda obě strany opravdu nahradily stejný řádek odlišně. Git dokáže automaticky sloučit kompatibilní změny i v rozvětvené historii. Další možností je lineární historie, ve které může dojít k fast-forward:

Například:

  1. ve větvi main máte nějaký commit (řekněme C1);
  2. ve větvi main vytvoříte nový commit s textem "My Awesome Project". Větev main teď ukazuje na commit C2;
  3. z aktuální pozice větve main vytvoříte větev feature/new-title - nová větev tedy také začíná na commitu C2;
  4. ve větvi feature/new-title vytvoříte commit s textem "My Super Project". Větev postoupí a ukazuje na commit C3;
  5. vrátíte se do větve main (která stále ukazuje na commit C2) a sloučíte do ní feature/new-title.

Git vidí, že větev main je přímým předkem větve feature/new-title: zatímco jste pracovali v jiné větvi, v historii main nepřibyly žádné nové commity. Proto pouze posune ukazatel větve main na commit C3, bez konfliktů.

main se přesune z C2 na C3 bez nového commituC1C2C3
main se přesune z C2 na C3 bez nového commitu

Historie větve main plynule navazuje na historii větve feature/new-title, takže Git pouze posune main dopředu - ke konfliktu nedojde.

Prohlížení historie změn

Historie projektu vám pomůže lépe pochopit, co se v něm děje.

Otevřete okno nástroje Git (obvykle ho najdete jako ikonu na levém postranním panelu nebo ve spodní části okna IDE) a na panelu nástrojů Git vyberte kartu Log nebo možnost Show Git Log. Zobrazí se graf všech vašich větví a commitů. Snadno tak uvidíte, ze které větve se která oddělila a kde se sloučily.

Okno s logem Gitu

Kliknutím na libovolný commit zjistíte, jaké změny obsahuje, kdo a kdy ho vytvořil. Skutečný stroj času pro váš kód.

Jak to souvisí s Claude Code

Změny Claude Code se v této historii objeví, až budou zaznamenané běžnými commity. V Git Logu je uvidíte stejně jako ty své: můžete otevřít libovolný commit a zkontrolovat, co přesně se změnilo.

Jak to funguje s Claude Code

Když už rozumíte větvím, snáz pochopíte, co Claude Code dělá při práci s vaším repozitářem. Tady je, jak vám s větvemi pomáhá a čemu věnovat pozornost:

  • vytvoří samostatnou větev, pokud s tím počítají úkol i pravidla projektu;
  • v důležitých chvílích navrhne commit - prohlédnete si diff a rozhodnete se, zda ho přijmete, nebo upravíte;
  • pomůže najít potřebný uložený commit a zvolit způsob návratu s ohledem na necommitované změny;
  • když při slučování dojde ke konfliktu, může vás požádat o pomoc - vyřešíte ho stejným nástrojem IDE;
  • umí připravit a okomentovat pull request (PR je návrh na sloučení větve do hlavní, například pomocí GitHub CLI).
Jak to souvisí s Claude Code

Než souhlasíte, prohlédněte si diff - zvlášť když Claude navrhuje smazat soubory nebo provést merge. Budete tak vždy vědět, co přesně se dostane do historie projektu.

Předchozí článek: Každodenní práce s Gitem · Následující článek: Pull request od vytvoření po sloučení