Neztrať svůj kód s Gitem

authorMatyáš Caras11/3/2025 12:30

Představte si, že byste museli veškerý kód psát aniž byste mohli použít Ctrl + Z k vrácení zpět. Zní to jako noční můra? Během vývoje se vám může stát, že se budete chtít vrátit k předchozí verzi kódu, což je přesně důvod, proč vznikl Git.

Cover Image

Co Git umí

Git je nástroj určený k verzování - vezme vaše soubory (kód, obrázky, cokoliv) a vytváří z nich “verze”. Kromě toho, že se k těmto verzím můžete vracet, umožňuje Git také spolupráci s dalšími lidmi díky možnosti nahrát soubory na vzdálený server.

Začínáme verzovat

Hlavní organizační jednotkou v Gitu je repozitář. Pro jednoduchost si můžete představit jeden repozitář jako projekt - pro každý projekt chcete mít vlastní repozitář. V souborovém systému se jedná jen o složku, ve které budete ukládat věci, které chcete verzovat.

Repozitář vytvoříme tak, že si otevřeme terminál (příkazový řádek) a pomocí cd se přesuneme do dané složky, ve které chceme mít repozitář (případně složku vytvoříme pomocí mkdir). Uvnitř potom zadáme příkaz git init, který vytvoří prázdný repozitář. Měla by vám vyskočit zpráva ve stylu Initialized empty Git repository in VASE_SLOZKA.

Teď si zkusíme přidat první soubor. Vytvoříme si soubor s názvem README.md (doslova čti mě), najdete ho v každém softwarovém projektu a uvádí se do něj nejdůležitější informace o projektu. Napište do něj nějaké informace o vašem týmu, např. kdo jsou členi týmu.

Verzování neprobíhá samo. Soubory musíme přidat do fronty (tzv. staging), a poté vytvořit revizi (commit). To první dosáhneme příkazem git add. Jako argument mu musíme dát, co chceme do fronty přidat. Buďto můžeme uvést jeden specifický soubor, nebo celou složku. Pokud chceme přidat všechny změny v aktuální složce, stačí zadat git add ., tečka zde znázorňuje aktuální složku, ve které příkaz spouštíme.

Jakmile příkaz zadáte, nejspíš nedostanete žádnou zpětnou vazbu. Abyste si ověřili, že jste změnu opravdu přidali do fronty, použijte příkaz git status. Zobrazí se vám něco jako

No commits yet
Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
    new file:   README.md

Výborně, to znamená, že jsme připraveni vytvořit revizi. Každá revize musí být spojená s nějakým uživatelem, je třeba si tedy nastavit jméno a e-mail, se kterou vaše revize budou spojeny. K tomu slouží příkaz git config:

git config --global user.name "Vaše Jméno"
git config --global user.email vas@email.cz

Protože jsme použili přepínač --global, tyto hodnoty se použijí jako výchozí ve všech repozitářích, kde nejsou změněny.

K vytvoření revize slouží příkaz git commit. Ke každé revizi se hodí přidat nějaký popis, co se v dané revizi stalo. Zpráva se specifikuje možností -m. Kdybychom chtěli vytvořit revizi s popisem Přidal jsem README, zadáme příkaz git commit -m "Přidal jsem README". Dostanete výstup v podobě 1 file changed, 3 insertions(+). Hurá! Úspěšně jste vytvořili první revizi.

Historie

Každá vytvořená revize má svůj hash – jednoznačný identifikátor, pomocí kterého revizi kdekoliv dohledáte. Pokud si chcete zobrazit historii revizí a jejich hashe, použijte příkaz git log. Je však jednodušší si tito informace zobrazit skrz nějaký nástroj (např. VS Code má integrovaný Git klient) nebo na webu (např. GitHub, o tom více níže).

Nechtěné soubory

Při tvorbě webových aplikací se vyskytne chvíle, kdy budete mít nějaké soubory, které rozhodně nechcete sdílet ve svém repozitáři. Ať už to jsou tajné klíče nebo jen 600MB složka s moduly, přesně kvůli tomuhle existuje .gitignore soubor. Do něj uvedete cesty k souborům a složkám, které nechcete sdílet. Soubor poté nepůjde přidat do fronty, ani když ho tam zkusíte dát manuálně.

Abyste si nemuseli pokaždé hledat, jaké všechny soubory se nemají nahrávat, existuje nástroj Gitignore.io, ve kterém si vyberete, se kterými technologiemi pracujete a dostanete hotový gitignore soubor.

Pozor: soubor je třeba pojmenovat přesně .gitignore, tedy s tečkou na začátku a bez další přípony (žádné .txŧ apod.). Pokud jste na Windows, zapněte si v průzkumníku souborů možnost zobrazení přípon a skrytých souborů.

(Zdroj. Windows 11 [Microsoft])


 

Spolupráce a vzdálené repozitáře

Není Git jako Git(Hub)

Možná jste při brouzdání internetem narazili na spoustu služeb, které začínají slovem Git. Tyto služby většinou poskytují nějaké služby související s Git ekosystémem, avšak s autory samotného nástroje Git nemají moc společného. Jednou takovou službou je GitHub. Díky němu můžete zálohovat své repozitáře na cizí server a hlavně spolupracovat na kódu s jinými lidmi. Kromě toho nabízí spoustu nástrojů pro vývojáře, k těm se ale dostaneme později.

Jakmile si založíte účet, klikněte vpravo nahoře na + a vytvořte nový repozitář (New repository).

(Zdroj: GitHub [GitHub, Inc.])


Jako viditelnost (visibility) nastavte soukromé (private), aby vám do kódu nekoukal někdo, kdo nemá. Ostatní si nastavíme sami, takže stačí nechat na hodnotách jako na snímku výše. Teď už jen stačí vytvořit stisknutím Create repository.

Napojení a sdílení

Abychom nahráli naše změny na GitHub, je potřeba přidat vzdálený repozitář (tzv. remote) do nastavení našeho lokálního repozitáře. Adresa našeho vzdáleného repozitáře je v podstatě stejná jako ta webová, kde si svůj GitHub repozitář prohlížíte: https://github.com/VASE_UZIVATELSKE_JMENO/NAZEV_REPOZITARE.

Repozitář tedy přidáme příkazem git remote add origin https://github.com/VASE_UZIVATELSKE_JMENO/NAZEV_REPOZITARE. Slovíčko origin zde označuje výchozí vzdálený repozitář. Nyní můžeme změny nahrát příkazem git push. Možná vám vyskočí chyba current branch has no upstream branch, to znamená, že Git neví, kam ve vzdáleném repozitáři má vaši větev nahrát a ve výchozím stavu mu to musíte říct. Aby to Git dělal sám, je třeba tuto možnost povolit příkazem git config --global push.autoSetupRemote true a poté znovu použít git push.

Protože se snažíte nahrát změny, je třeba se přihlásit, aby GitHub věděl, že změny opravdu nahráváte vy. To ulehčuje nástroj zvaný Git Credential Manager. Pokud jste při instalaci Gitu nechali nastavené výchozí hodnoty, nainstaloval se současně s ním a při nahrávání na vás vyskočí takovéto okno:

Zde stačí vybrat možnost Sign in with your browser a autorizovat přihlášení ve vašem prohlížeči. Přihlašovací údaje se bezpečně uloží do vašeho počítače a v dohledné době se nebudete muset o přihlašování vůbec starat.

Když se vrátíte do terminálu, uvidíte, že příkaz se dokončil. Nyní se můžeme podívat na GitHub do našeho repozitáře.

(Zdroj: GitHub [GitHub, Inc.])


Hle! Naše soubory jsou zde.

> Poznámka: pokud se vaše revize nepřipisují k vašemu účtu, nejspíš máte ve svém GitHub profilu nastavený e-mail jako soukromý. GitHub propojuje revize s GitHub účty právě na základě e-mailu, pokud i tak nechcete zveřejňovat svůj e-mail, v nastavení najdete pod možností “Keep my email addresses private” alternativní e-mail ve formátu neco@users.noreply.github.com. Když si tento e-mail nastavíte v Git konfiguraci (vizte část Začínáme verzovat), revize se začnou připisovat vašemu GitHub profilu.

Teď je ještě potřeba přidat ostatní členy vašeho týmu. Nahoře vyberte možnost Settings a v sekci Collaborators přidejte GitHub profily vašich spolupracovníků.

(Zdroj: GitHub [GitHub, Inc.])


Všem pozvaným přijde na e-mail pozvánka, přes kterou se do repozitáře dostanou. Poté si jej mohou lokálně stáhnout příkazem git clone https://github.com/VASE_UZIVATELSKE_JMENO/NAZEV_REPOZITARE. Když budete chtít stáhnout změny z GitHubu k vám, použijte příkaz git pull.

Větvení a spojování

Jakmile začnete vyvíjet s dalšími lidmi, rozhodně nechcete vyvíjet dvě funkcionality najednou a řešit tak spoustu tzv. konfliktů (o těch později ve článku). Od toho jsou v Gitu větve. Větve umožňují paralelně pracovat na kódu, aniž by se originál ztratil. Změny pak můžeme spojit (angl. merge) s originálem.

Novou větev založíme příkazem git branch NAZEV, jako podklad se použije aktuálně vybraná větev. Já si ji pojmenuju třeba husta-funkce. Všechny vytvořené větve si zobrazíte příkazem git branch --list. Teď se na větev musíme přepnout, toho docílíme příkazem git checkout NAZEV. Zkuste teď vytvořit nový soubor, přidat do fronty, vytvořit revizi a nahrát na GitHub.

Když si pak svůj GitHub repozitář otevřete, uvidíte, že změna se nezobrazuje. Místo toho uvidíte žlutý nápis jako na obrázku.

(Zdroj: GitHub [GitHub, Inc.])

 

To znamená, že jsme úspěšně nahráli změnu na jinou větev. Abyste si ji zobrazili, stačí kliknout buďto na název větve ve žlutém nadpisu, nebo kliknout na rozbalovací menu (jak ukazuje šipka) a vybrat ji tam.

Pull request

Teď když chceme změny vrátit na naši hlavní větev, musíme provést spojení (merge). Když pracujete v týmu, je nejlepší použít tzv. pull requesty, které slouží k tomu, aby před spojením váš kód prohlédli ostatní spolupracovníci. Pull requesty (zkráceně PR) jsou pouze on-line věcí, samotný Git nic takového neumí.

Přepněte se ve svém GitHub repozitáři na větev, kterou chcete spojit. Pod výběrem větví se vám zobrazí informace o tom, o kolik revizí je tahle větev napřed (nebo pozadu) oproti zdrojové větvi. PR vytvoříte kliknutím na tlačítko Contribute a Open pull request.

(Zdroj: GitHub [GitHub, Inc.])


Na nové stránce stačí zadat název, případně popis, a vybrat vpravo pod Reviewers lidi, kteří mají váš pull request zkontrolovat.

Pokud si vzpomenete, že chcete ještě přidat nějaké změny na danou větev, vůbec to nevadí a není třeba vytvářet nový pull request – změny se v něm automaticky objeví.

Jakmile stisknete tlačítko Create, uvidíte po chvilce zelenou fajfku. To znamená, že vaše změní nejsou nijak v konfliktu s tím, co se mezitím událo na cílové větvi. Pojďme si tedy ukázat, co by se stalo, kdybychom na dvou větvích změnili ten stejný soubor.

Konflikty

Řekněme, že někdo na main větvi změnil soubor README, aby obsahoval toto:

Já však na své větvi husta-funkce chci, aby ten soubor obsahoval toto:

Větvení našeho repozitáře tedy vypadá takhle:

Abychom mohli změny z větve husta-funkce vložit zpět do větve main, musíme nejdřív změny, které nastaly na větvi main, vložit do větve husta-funkce. Když se podíváme na náš pull request, který jsme před chvíli založili, místo zelené fajfky uvidíme následující:

(Zdroj: GitHub [GitHub, Inc.])

Jelikož nastaly rozpory, které nelze jednoduše vyřešit aniž by se některá ze změn ztratila, je třeba vyřešit věci manuálně. GitHub nabízí web editor, ve kterém jde konflikty řešit, avšak při větších konfliktech se v něm může hůře orientovat. Proto si ukážeme, jak tyto změny vyřešit lokálně.

Přepněte se do vaší větve (git checkout). Nyní je potřeba stáhnout změny ze vzdáleného repozitáře, k čemuž slouží příkaz git fetch. Jako první argument musíte uvést zdroj, pro nás to je vzdálený repozitář, takže origin. Druhý argument je název větve, pro nás to bude main, jelikož to je větev, do které pak budeme změny spojovat. Zadejte tedy git fetch origin main, jakmile příkaz doběhne, spojíme změny z main do husta-funkce příkazem git merge origin/main.

> Poznámka: Kdybychom v origin/main vynechali to origin/, Git by místo změn, které jsou na GitHubu, bral lokální větev main, kterou byste však museli nejdřív aktualizovat příkazem git pull.

Nyní změny nahrajte (git push). Na GitHubu teď bude zas vše zelené.

(Zdroj: GitHub [GitHub, Inc.])


 Když teď změny spojíte zeleným tlačítkem, větvení bude vypadat takhle:

Tabulka příkazů

Pro přehlednost najdete níže tabulku všech příkazů, které se použily v tomto návodu, i s popisem jejich funkce.

PříkazPopisUkázka použitíPopis použití
git initVytvoří nový repozitář v aktuální složce  
git addPřidá soubory do “fronty” k revizigit add slozka/soubor.txtPřidá soubor na dané cestě (zde slozka/soubor.txt) do fronty
git commitVytvoří revizigit commit -m “Ahoj světe”Vytvoří novou revizi s popisem Ahoj světe
git configUmožňuje změnit chování Gitugit config --global user.name “John Doe”Nastaví jméno uživatele, které se bude zobrazovat u revizí, na John Doe
git statusZobrazí aktuální stav repozitáře  
git pushNahraje lokální změny do vzdáleného repozitáře  
git cloneStáhne vzdálený repozitář do vašeho počítačegit clone https://github.com/VASE_UZIVATELSKE_JMENO/NAZEV_REPOZITAREStáhne vzdálený repozitář z adresy https://github.com/VASE_UZIVATELSKE_JMENO/NAZEV_REPOZITARE
git pullStáhne nové změny ze vzdáleného repozitáře  
git diffZobrazí rozdíl mezi vašimi novými změnami a aktuálním stavem repozitáře  

© 2025 Student Cyber Games, z.s. – Vydáno pod licencí CC BY-NC-SA 4.0.