September discount week
Pouze tento týden sleva až 80 % na e-learning týkající se MS Office
50 % bodů zdarma na online výuku díky naší Slevové akci!

Lekce 3 - Git - Základy

V minulém dílu našeho seriálu tutoriálu o Gitu jsme se věnovali instalaci a tvorbě repositáře. Dnes se podíváme na základní práci s Gitem. Projdeme práci se soubory a procházení historie. Máte se určitě na co těšit. Budeme pracovat s repositářem Gitu, který jste si stáhli v minulém díle.

Commity

Commit je základní stavební jednotka. Commitem označíme místo, které si chceme zapamatovat pro pozdější použití, například protože je klíčové. Obsahuje snapshot všech souborů, které jsou v repositáři nebo souborů, které jsme přidali. Kromě toho Commit obsahuje informaci o tom kdo a kdy jej vytvořil. Vedle toho Git pro každý commit generuje hash, který jednoznačně identifikuje každý commit. Pojďme se podívat na malou ukázku. Při otevření repositáře v Git GUI pod výběrem "Repository -> Visualize Master’s history" se nám zobrazí graf commitů Gitu.

Historie commitů v Gitu

Vlevo je graficky znázorněný postup commitů po sobě. Rozdvojení probíhá ve větvích (viz další kapitoly). Vpravo od grafu je napsána zpráva ke commitu, která popisuje změny od minula. V prostředním sloupečku je poté vypsáno jméno autora a jeho email. Právě proto jsme v minulém díle nastavovali uživatelské jméno a heslo. V posledním sloupečku je čas, kdy byl commit proveden. Všimněte si, že není nutné mít commity časově po sobě. Je commit 8.8.2014, poté 8.7.2014, poté 3.8.2014 a teprve po spojení je commit 10.8.2014. Samozřejmě, že spojení dvou větví musí proběhnout až po commitech v jednotlivých větvích, ale práce na jednotlivých větvích může probíhat naprosto nelineárně.

Detail commitu v Gitu

Po rozkliknutí commitu vidíme ve spodní části jeho hash (SHA1 ID). Tento hash jej konkrétně identifikuje. Chceme-li se dostat na tento commit, použijeme právě tento hash. Kromě toho také vidíme hash rodičovských commitů (protože jsem vzal commit, který spojoval dvě větve) a hash dalšího commitu v řadě. Na posledním řádku je uvedeno do které větve tento commit patří.

Přidání souborů

Abychom vytvořili nové nebo upravili stejné soubory a poté je dostali do commitu, potřebujeme je nejprve dostat do stage. Zapneme si Git Bash ve složce, kam jsme si stáhli Git. Poté zavoláme příkaz git status. Zaznamenáte následující výstup:

On branch master
Your branch is up-to-date with ‘origin/master’.
Nothing to commit, working direktory clean
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

Git nám hlásí, že nenalezl žádné změny v adresáři. Není divu, ještě jsme nic neprovedli. Co se tedy stane, když přidáme soubor myFile.txt? Opět použijeme git status.

On branch master
Your branch is up-to-date with 'origin/master'.
Untracked files:
  (use "git add <file>..." to include in what will be committed)
    myFile.txt
nothing added to commit but untracked files present (use "git add" to track)

Git nám říká, že stále nemá co vložit do commitu, ale nalezl nesledované soubory. Zároveň nám tyto soubory vypsal a poradil nám, co máme udělat, abychom je dostali do commitu. Nesledované soubory jsou to proto, protože ještě nejsou v žádném commitu a Git nemá tedy vytvořený jejich snapshot. Použijeme nabízené git add myFile.txt a opět se podíváme na git status.

On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)
    new file:   myFile.txt

Commit

Tentokrát nám Git oznámil, že tu jsou změny, které budou commitnuty. Jedná se o akci přidání nového souboru (new file) s názvem myFile.txt. Pojďme jej tedy dát do commitu. K tomu slouží příkaz git commit (překvapivě :-) ). Teď máme dvě možnosti, buď můžeme použít pouze git commit a zobrazí se nám editor, ve které máme editovat popis. Defaultně se popis otevírá v příkazové řádce, abychom to změnili, musíme změnit config. Jak jsme to již dělali, nastavíme si tentokrát core.editor na váš oblíbený editor. Více informací zde. Druhá možnost je použít atribut -m a za něj napsat zprávu. Takže náš příkaz bude vypadat git commit -m "Muj první commit".

[master 8948f77] Muj prvni commit
1 file changed, 0 insertions(0), 0 deletions(-)
Create mode 100644 myFile.txt

Tím jsme vytvořili commit. Teď jej naleznete v historii commitů. Gratuluji, právě jste přispěli na vývoj Gitu :-). Pokud se chcete podívat na poslední commit, používá se na to příkaz git show, který opět vypíše autora, čas, zprávu a změny, které byly v commitu provedeny.

Editace

Nyní si pojďme soubor editovat. Do souboru napíšeme například "Hello World" a podíváme se, co nám vypíše git status.

On branch master
Your branch is ahead of 'origin/master' by 1 commits.
  (use "git push" to publish your local commits)
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)
    modified:   myFile.txt
no changes added to commit (use "git add" and/or "git commit -a")

Tentokrát nám Git ohlásil, že soubor myFile.txt byl změněn. Opět tedy použijeme git add myFile.txt a přidáme soubor do stage. I když je soubor již v repositáři, změny nebudou uloženy dokud jej nepřidáte do stage.

Několik rad na závěr

Abychom nemuseli přidávat všechny soubory po jednom, existuje několik věcí, které nám pomohou zjednodušit práci.

Příkaz git add přijímá jako parametr hvězdičku, kterou známe z příkazové řádky. Je tedy možné například přidat všechny HTML soubory (git add *.html) nebo všechny PHP skripty končící slovem Presenter (git add *Presenter.php). Pro přidání všech souborů napíšeme jako parametr hvězdičku (git add *). Tím přidáme všechny soubory. Tomuto mezikroku se můžeme vyhnout a zavolat rovnou commit s atributem –a (git commit –a), který uloží aktuální složku jak je. Tedy odstraní smazané soubory a aktualizuje nové nebo editované.

O popisu commitů bylo sepsáno již hodně, proto vás pouze přesměruji na některé jiné zdroje.

Ještě by bylo dobré podotknout, že některé servery používají první řádek popisu jako nadpis emailu. Maily se posílají majitelům repositáře, který váš commit poté povolí nebo zakáže. Proto se snažte na první řádek uvést co nejstručněji akci, kterou jste provedli a teprve na dalších řádcích to trochu rozvést. Také se nedoporučuje mít zprávu delší jak 50 znaků.

To by pro dnešek bylo vše, příště se podíváme trochu do historie a budeme porovnávat jednotlivé verze mezi sebou.


 

Předchozí článek
Git - Instalace a vytvoření repositáře
Všechny články v sekci
Git
Článek pro vás napsal Patrik Valkovič
Avatar
Jak se ti líbí článek?
18 hlasů
Věnuji se programování v C++ a C#. Kromě toho také programuji v PHP (Nette) a JavaScriptu (NodeJS).
Aktivity (2)

 

 

Komentáře

Avatar
Dominik Gavrecký:27.12.2015 23:43

I když je soubor již v repositáři, změny nebudou uloženy dokud jej nepřidáte do stage.

Čo tým myslíš pridáte do STAGE ? Prípadne ako to spravím ?

Odpovědět
27.12.2015 23:43
Hlupák nie je ten kto niečo nevie, hlupákom sa stávaš v momente keď sa na to bojíš opýtať.
Avatar
Dominik Gavrecký:28.12.2015 0:08

Pretože ak postupujem tak ako píšeš na gite sa mi súbor neaktualizuje.

Odpovědět
28.12.2015 0:08
Hlupák nie je ten kto niečo nevie, hlupákom sa stávaš v momente keď sa na to bojíš opýtať.
Avatar
Odpovídá na Dominik Gavrecký
Štefan Pružinský:28.12.2015 10:34

Skús použiť git add myFile.txt, malo by to takto fungovať. :)

Odpovědět
28.12.2015 10:34
Najefektívnejším spôsobom debuggingu je modlitba. :)
Avatar
Neaktivní uživatel:30.1.2016 19:57

Ahoj.
Mohli by ste mi pomôcť. Kde podľa priloženého obrázku v GIT GUI nájdem
„Repository -> Visualize Master’s history“ ???

Odpovědět
30.1.2016 19:57
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Patrik Valkovič:30.1.2016 20:11

První musíš mít otevřený repositář. Buď z někama kklonovat, nebo vytvořit vlastní. Potom, když to otevřeš v GitGUI, tak tam nabídka bude.

Odpovědět
30.1.2016 20:11
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Odpovídá na Patrik Valkovič
Neaktivní uživatel:30.1.2016 20:12

OK . Ďakujem za rýchlu odpoveď. Odskúšam to..

Odpovědět
30.1.2016 20:12
Neaktivní uživatelský účet
Avatar
Garrom Orc Shaman:23.3.2017 19:49

Zdravím. Děkuji za kvalitní návod jen mám jednu otázku. Když vytvořím repositář ze složky projektu (viz. obrázek) kde jsou uloženy commity ?

-Garrom

Odpovědět
23.3.2017 19:49
Life for Code, Code for Life. I chose my path, I should stick on it.
Avatar
Atrament
Super redaktor
Avatar
Odpovídá na Garrom Orc Shaman
Atrament:23.3.2017 20:59

Všechno je v tom adresáři .git

 
Odpovědět
23.3.2017 20:59
Avatar
Odpovědět
24.3.2017 11:59
Life for Code, Code for Life. I chose my path, I should stick on it.
Avatar
jAk3r
Člen
Avatar
jAk3r:10.4.2017 10:27

Proč když chci přidat popis ke commitu mi to háže tyto errory?

"Chyba": https://ctrlv.cz/kgYe

díky všem :)

Odpovědět
10.4.2017 10:27
Pokud něčeho chceš dosáhnout, musíš si za tím jít.
Avatar
Honza Bittner
Redaktor
Avatar
Odpovídá na jAk3r
Honza Bittner:10.4.2017 10:36

Protože tam píšeš nějaké divné (české) uvozovky. V programování obecně existují jen 2 typy: ' apostrof a " uvozovka.

Takže napiš

git commit -m "Prvni verze"

a půjde ti to

Odpovědět
10.4.2017 10:36
Student FIT ČVUT. In love with Flutter. :-) Sleduj mě na https://twitter.com/tenhobi a ptej se na cokoli na https://g...
Avatar
Patrik Weber
Člen
Avatar
Patrik Weber:6.2.2018 15:07

můžeme mi poradit jak načtu ty commity popř. kde je mám najit? respektive mám otevřený ten program ale nic v něm není :D takže to co je na obrázku tam nemám

 
Odpovědět
6.2.2018 15:07
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
jindrich.jokel:21.3.2018 23:30

"Zapneme si Git Bash ve složce, kam jsme si stáhli Git"
to je tam kde jsem si nainstaloval ten program Git nebo ta slozka co se mi vytvorila tim klonovanim? V te klonovane slozce to neni a kdyz pustim bash normalne v te slozce Git tak mi to po prikazu git status napise toto: fatal: Not a git repository (or any of the parent directories): .git

tak nevim, co delam spatne

Editováno 21.3.2018 23:31
 
Odpovědět
21.3.2018 23:30
Avatar
Odpovídá na jindrich.jokel
Karel Labonek:23.7.2018 15:41

Ahoj, zřejmě jsi to dávno vyřešil, ale pro ostatní. Také jsem chvilku přemýšlel kterou složku myslel. Teprve začínám tak doufám že nebudu mást ostatní špatnou radou, ale zřejmě bylo myšleno složku s klonem Gitu, tam vytvoříš new soubor (pozor ne složku, vytvoření prázdné složky není vidět) a tak dál.

 
Odpovědět
23.7.2018 15:41
Avatar
Peter Večera
Brigádník
Avatar
Peter Večera:18.8.2018 14:15

$ git commit -m „Muj první commit“

error: pathspec 'první' did not match any file(s) known to git.
error: pathspec 'commit“' did not match any file(s) known to git.

Keď Vás to bude hádzať chybu ako mne treba zmenit „“ za " ". takto :
git commit -m "Muj druhy commit"

 
Odpovědět
18.8.2018 14:15
Avatar
Honza Bittner
Redaktor
Avatar
Odpovídá na Peter Večera
Honza Bittner:18.8.2018 14:33

Tak to je snad jasné, že musíš používat uvozovky tímto způsobem...

Odpovědět
18.8.2018 14:33
Student FIT ČVUT. In love with Flutter. :-) Sleduj mě na https://twitter.com/tenhobi a ptej se na cokoli na https://g...
Avatar
Peter Večera
Brigádník
Avatar
Odpovídá na Honza Bittner
Peter Večera:18.8.2018 14:36

ale keď to niekto (si myslím že každý ) kopíruje priamo z článku z ktorého sa to učí tak nechápe prečo to stále nefunguje aj keď tu tvrdia že to funguje :-) Viď koniec odstavca Commit.

 
Odpovědět
18.8.2018 14:36
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovědět
18.8.2018 14:44
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
Honza Bittner
Redaktor
Avatar
Odpovídá na Peter Večera
Honza Bittner:18.8.2018 15:08

Aha, ono to bylo v článku. To jsem si nevšiml, promiň tedy za výtku. :-)

Odpovědět
18.8.2018 15:08
Student FIT ČVUT. In love with Flutter. :-) Sleduj mě na https://twitter.com/tenhobi a ptej se na cokoli na https://g...
Avatar
Odpovídá na Honza Bittner
Petr Spěvák:4.9.2018 16:14

Apostrof ` a jednoduchá uvozovka ' jsou dva různé znaky.

 
Odpovědět
4.9.2018 16:14
Avatar
Honza Bittner
Redaktor
Avatar
Odpovědět
4.9.2018 16:21
Student FIT ČVUT. In love with Flutter. :-) Sleduj mě na https://twitter.com/tenhobi a ptej se na cokoli na https://g...
Avatar
Odpovídá na Honza Bittner
Petr Spěvák:4.9.2018 19:53

OK, uznávám, že znak, který jsem uvedl apostrof není (páč je to francouzský accent grave, v angličtině a MySQL známý také jako "backtick").
Ale vzhledem k rozdílu mezi znaky ’ a ' by možná bylo lepší poněkud mnohoznačné slovo apostrof nepoužívat. To už je samozřejmě čistě můj názor.

 
Odpovědět
4.9.2018 19:53
Avatar
Michal Skrisa:16.11.2018 0:02

Nazdar, chcem sa spýtať, čo som dobabral :)
Pri poslednom kroku (git commit –a) sa mi otvoril VS Code, že čaká na príkaz.
Písalo tam niečo, že mám spraviť push, tak som spravil push a teraz som v mastri na prvom mieste.
Dúfam, že nevybuchla atomka niekde :)

 
Odpovědět
16.11.2018 0:02
Avatar
CoffeeMAN
Člen
Avatar
Odpovídá na David Čápka
CoffeeMAN:21. ledna 7:47

Neaktuální odkaz - Page not found: "http://abloga­boutcode.com/2011/03­/23/proper-git-commit-messages-and-an-elegant-git-history/"

Odpovědět
21. ledna 7:47
Není čas, ztrácet čas.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 24 zpráv z 24.