Proč používat Git?
Git řeší reálné problémy:
- Vrácení změn - rozbili jste kód? Vrátíte se o hodinu zpět
- Historie - vidíte kdo, kdy a proč změnil každý řádek
- Spolupráce - více lidí pracuje na kódu bez přepisování navzájem
- Záloha - kód na GitHubu, i když shoří notebook
- Experimenty - zkusíte novou funkci, nefunguje, smažete bez ovlivnění hlavního kódu
- Portfolio - GitHub je vaše CV pro programátory
První týden budete zmatení. Příkazy vypadají krypticky (git rebase, git cherry-pick). Občas něco rozbijete a budete googlovat "how to undo git commit". To je normální. 90% práce s Gitem je 5 příkazů - commit, push, pull, branch, merge. Zbytek se naučíte postupně když to budete potřebovat.
První kroky s Gitem
Windows: git-scm.com - stáhněte installer
Mac: brew install git (pokud máte Homebrew) nebo git-scm.com
Linux: sudo apt install git (Ubuntu/Debian) nebo sudo yum install git (RedHat/CentOS)
Ověření: otevřete terminál, napište git --version
git config --global user.name "Vaše Jméno"
git config --global user.email "vas@email.cz"
Toto se zobrazí u každého commitu. Nastavte to jednou, funguje ve všech projektech.
Otevřete složku s projektem v terminálu:
cd /cesta/k/projektu
git init
Gratulujeme - vytvořili jste Git repository. Složka .git se vytvořila (skrytá), tam Git ukládá historii.
Co se může pokazit (a je to normální)
První den
- Příkazy nedávají smysl - "add", pak "commit", pak "push"? Proč 3 kroky? Je to workflow, pochopíte brzy.
- Chybové hlášky - "fatal: not a git repository" = zapomněli jste git init nebo nejste ve správné složce.
- Nevíte co commitovat - všechno? Část? Když? Naučíte se cítit kdy je commit vhodný.
- Zmáčkli jste vim - git otevřel textový editor a nevíte jak ho zavřít. :wq (uložit a zavřít), :q! (zavřít bez uložení).
První týden
- Konflikt při merge - změnili jste stejný soubor jako kolega. Git neví kterou verzi použít. Musíte to vyřešit ručně.
- Commitujete špatné soubory - .env, node_modules, .DS_Store. Potřebujete .gitignore soubor.
- Zapomněli jste push - commitli lokálně, ale změny nejsou na GitHubu. Commit ≠ push.
- Ztratili jste změny - git reset --hard a je pryč. Příště buďte opatrní s --hard flagy.
První týden: zmatení, časté googlování, bojíte se něco rozbít. První měsíc: commit/push/pull je automatické, zvládáte základy. 3 měsíce: práce s větvemi, merge konflikty nejsou děsivé. 6 měsíců: Git je přirozená část workflow, nemusíte přemýšlet.
Základní Git příkazy
git init
Co dělá: Vytvoří nové Git repository v aktuální složce
Kdy použít: Jednou na začátku nového projektu
Příklad: git init
git status
Co dělá: Ukáže stav repository - co se změnilo, co je staged, co ne
Kdy použít: Kdykoli chcete vědět co se děje. Používejte často.
Příklad: git status
git add
Co dělá: Přidá soubory do staging area (připraví je na commit)
Kdy použít: Před každým commitem
Příklady:
git add soubor.js- přidá jeden souborgit add .- přidá všechny změněné souborygit add src/- přidá všechny soubory ve složce src/
git commit
Co dělá: Uloží změny do historie s popisnou zprávou
Kdy použít: Po dokončení logické jednotky práce (oprava bugu, nová funkce)
Příklady:
git commit -m "Oprava bugu v přihlášení"git commit -m "Přidána validace emailu"
git push
Co dělá: Odešle commity z lokálního počítače na vzdálený server (GitHub)
Kdy použít: Po commitu, když chcete sdílet změny nebo zazálohovat
Příklad: git push origin main
git pull
Co dělá: Stáhne změny ze vzdáleného serveru do lokálního repository
Kdy použít: Před začátkem práce, abyste měli aktuální verzi
Příklad: git pull origin main
git clone
Co dělá: Stáhne celé repository z GitHubu na váš počítač
Kdy použít: Jednou na začátku, když chcete pracovat na existujícím projektu
Příklad: git clone https://github.com/uzivatel/projekt.git
Základní Git workflow
Každodenní workflow (solo projekt)
- Ráno:
git pull- stáhněte případné změny - Pracujete na kódu - editujete soubory
- Průběžně:
git status- kontrola co se změnilo - Po dokončení části:
git add .- přidání změn - Commit:
git commit -m "Popis změny" - Večer nebo průběžně:
git push origin main- odeslání na GitHub
Jak často commitovat
- Příliš často: Po každém řádku kódu - nesensovní
- Příliš zřídka: Jednou týdně - ztratíte granularitu historie
- Správně: Po dokončení logické jednotky (oprava bugu, nová funkce, refaktoring jednoho souboru)
Pravidlo: Commit by měl být samostatně funkční - pokud se vrátíte k tomuto commitu, projekt by měl fungovat.
Dobré commit zprávy
Špatně:
- "Update" - co jste updatli?
- "Fix" - co jste opravili?
- "asdf" - vůbec ne
- "Změny" - nepopisuje nic
Dobře:
- "Oprava validace emailu v registračním formuláři"
- "Přidána funkcionalita exportu do CSV"
- "Refaktoring API klienta pro lepší error handling"
- "Aktualizace závislostí (React 17 → 18)"
GitHub - vzdálený repository
Co je GitHub
GitHub je hosting pro Git repositories. Git = lokální verzování na vašem PC, GitHub = cloud pro sdílení a zálohu. Existují alternativy (GitLab, Bitbucket), ale GitHub je nejpopulárnější.
Vytvoření účtu a prvního repository
- Registrace na online Git platformě (např. GitHub) - zdarma
- Klikněte "New repository"
- Název: "muj-prvni-projekt"
- Popis (volitelné): "Testovací projekt pro učení Gitu"
- Public vs Private: Public = všichni vidí, Private = jen vy
- Klikněte "Create repository"
Propojení lokálního projektu s GitHubem
Máte lokální projekt a chcete ho nahrát na GitHub:
- Na GitHubu vytvořte repository (viz výše)
- V terminálu v projektu:
git remote add origin https://github.com/vase-jmeno/muj-prvni-projekt.git
git branch -M main
git push -u origin main
První push může vyžadovat přihlášení - GitHub vás provede.
Personal Access Token
GitHub už nepodporuje hesla pro Git operace. Potřebujete Personal Access Token:
GitHub → Settings → Developer settings → Personal access tokens → Generate new token → Vyberte "repo" → Generate
Token zkopírujte a použijte místo hesla při git push.
Práce s větvemi (branches)
Co jsou větve
Větev = paralelní verze kódu. Hlavní větev (main/master) je stabilní, pracujete na vedlejší větvi, pak ji sloučíte. Umožňuje experimentovat bez rozbití hlavního kódu.
Základní příkazy pro větve
git branch
Co dělá: Zobrazí všechny větve
Příklad: git branch
git branch nova-funkce
Co dělá: Vytvoří novou větev s názvem "nova-funkce"
Příklad: git branch nova-funkce
git checkout nova-funkce
Co dělá: Přepne se na větev "nova-funkce"
Příklad: git checkout nova-funkce
Zkratka: git checkout -b nova-funkce - vytvoří a přepne najednou
git merge nova-funkce
Co dělá: Sloučí změny z "nova-funkce" do aktuální větve
Workflow:
- Pracujete na větvi "nova-funkce"
- Dokončíte, commitnete
git checkout main- vrátíte se na maingit merge nova-funkce- sloučíte změny do main
Merge konflikty
Konflikt = vy i kolega změnili stejný řádek, Git neví kterou verzi použít. Musíte to vyřešit ručně:
- Git označí konfliktní soubor:
<<<<<<< HEAD váš kód ======= jejich kód >>>>>>> nova-funkce - Ručně upravte soubor - rozhodněte co ponechat
- Smažte značky (<<<, ===, >>>)
git add soubor.jsgit commit -m "Vyřešení merge konfliktu"
Časté chyby začátečníků
- Commitují vše najednou: 50 změněných souborů, commit "Změny". Rozdělte na menší logické commity.
- Zapomínají .gitignore: Commitují node_modules/, .env, .DS_Store. Přidejte .gitignore soubor.
- Pracují přímo na main: Rozbijou hlavní větev. Pro každou funkci nová větev.
- Nepíšou popisné commit zprávy: "Fix", "Update", "Change". Buďte specifičtí.
- Necommitují průběžně: Pracují celý den, pak jeden obří commit. Ztrácejí granularitu.
- Používají git add . slepě: Přidají soubory co tam nechtějí. Použijte
git statuspředgit add. - Bojí se Gitu: "Co když něco rozbiju?" Git téměř vždy umí vrátit zpět. Experimentujte.
- Nepoužívají git pull před prací: Pracují na staré verzi, pak konflikt při push. Vždy pull první.
git reflog - seznam všech akcí, můžete se vrátit téměř kdekoli
git reset --hard HEAD~1 - vrácení posledního commitu (POZOR: ztratíte změny)
git revert [commit-hash] - bezpečnější vrácení - vytvoří nový commit který ruší změny
Google je váš přítel - 99% problémů už někdo vyřešil na Stack Overflow.
git log - historie commitů
git log --oneline - kompaktní historie
git diff - ukáže co se změnilo (před add)
git diff --staged - ukáže co je staged (před commit)
git stash - dočasně schová změny (užitečné při přepínání větví)
git stash pop - vrátí schované změny