5. diel - Git - Skúmanie histórie
V predchádzajúcom kvíze, Kvíz - Princípy, inštalácie a základy Gitu, sme si overili nadobudnuté skúsenosti z predchádzajúcich lekcií.
V dnešnom tutoriáli Git sa budeme zaoberať identifikáciou commitov a začneme skúmať históriu. Vypíšeme si všetky commity, zobrazíme zmeny v súboroch, vyfiltrujeme históriu a zobrazíme históriu vetiev.
Všetky príkazy budeme skúšať v našom naklonovanom
repozitári Laravel z lekcie Git – Základy –
Dokončenie. Otvoríme terminál MinTTY a pomocou príkazu
cd laravel sa presunieme do repozitára.
Identifikácia commitov
V Gite je možné commit identifikovať rôznymi spôsobmi, čo nám umožňuje jednoznačne určiť konkrétny commit. Medzi kľúčové metódy identifikácie patria:
- hash commitu,
- meno vetvy,
- tag.
Hash commit
Ako už bolo spomenuté v predchádzajúcich lekciách, každý commit je
definovaný svojim hashom. Jedná sa o 40-miestne
hexadecimálne číslo, napríklad
036ea83da2afba28163a1f959a227cda7bd14a88. Toto číslo je
jedinečné pre každý commit. Na identifikáciu commitu však nemusíme toto
číslo písať celé, stačí iba jeho niekoľko prvých znakov.
Meno vetvy
Každá vetva (branch) je zložená minimálne z jedného
commitu. Pri vytvorení nového lokálneho repozitára a prevedení prvého
commitu vytvárame hlavnú vetvu s názvom master
alebo main.
Názov hlavnej vetvy je zvyčajne nastavený pri inštalácii Gitu a je možné ho neskôr premenovať. V ďalších lekciách sa budeme venovať vetvám podrobnejšie.
Tag
Tag slúži na označenie dôležitých bodov v histórii
projektu, ako sú nové verzie, dôležité opravy
chýb alebo kľúčové miľníky. Môžeme ich
pridávať k ľubovoľnému commitu. Zoznam všetkých tagov v repozitári je
možné vypísať pomocou príkazu git tag, ktorý je nasledovaný
výpisom tagov zoradených abecedne.
Teraz príkazom git tag zobrazíme všetky vytvorené tagy v
repozitári laravel zoradené abecedne:
MINGW64:/c/mygit/laravel IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x) $ git tag v10.0.0 v10.0.1 v10.0.2 ... IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x) $
Klávesmi ↑ alebo ↓ si môžeme zoznam tagov prezerať. Stlačením klávesu q zoznam zatvoríme.
Každý tag musí mať jedinečný názov. Každý novovytvorený tag je automaticky pripojený k aktuálnemu commitu. Git umožňuje vytvoriť ľahký alebo anotovaný tag.
Ľahký tag
Ľahký tag sa veľmi podobá vetve, iba s tým rozdielom, že sa
nepremiestňuje. Slúži iba ako ukazovateľ na commit. Na
vytvorenie tagu stačí vytvoriť alebo sa prepnúť na commit, ktorý chceme
označiť a zadať príkaz git tag <tag_name>.
Pre aktuálny commit vytvoríme nový tag s názvom
easy_tag:
MINGW64:/c/mygit/laravel IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x) $ git tag easy_tag IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x) $
Spustením príkazu git tag, uvidíme náš novo vytvorený
tag:
MINGW64:/c/mygit/laravel IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x) $ git tag easy_tag v10.0.0 v10.0.1 v10.0.2 ... IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x) $
Anotovaný tag
Anotovaný tag je plnohodnotným objektom, porovnateľný s
commitom. Obsahuje všetky identifikačné informácie ako commit (meno
autora, čas, hash) a môžeme k nemu pridať správu. Na jeho vytvorenie
použijeme príkaz
git tag -a <tag_name> -m "<tag_message>".
K aktuálnemu commitu teraz vytvoríme anotovaný tag:
MINGW64:/c/mygit/laravel IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x) $ git tag -a annotated_tag -m "Creation of an annotated tag" IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x) $
Tag si opäť overíme príkazom git tag:
MINGW64:/c/mygit/laravel IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x) $ git tag annotated_tag easy_tag v10.0.0 v10.0.1 v10.0.2 ... IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x) $
Skúmanie histórie
Prehliadanie histórie je v Gite jednou z najdôležitejších operácií, vďaka ktorej máme možnosť obnoviť stav repozitára do určitého bodu v histórii. Git poskytuje tieto kľúčové príkazy:
git logna výpis všetkých commitov, zobrazenie zmien v súboroch, filtrovanie histórie a zobrazenie histórie vetiev.git branchna zobrazenie zoznamu vetiev.git showna zobrazenie detailov commitu.git diffna porovnanie zmien.
Dnes si ukážeme príkaz git log. S ďalšími príkazmi sa
zoznámime neskôr.
Príkaz git log
Príkazom git log môžeme vypísať všetky commity, zobraziť
zmeny v súboroch, filtrovať históriu a zobraziť históriu vetiev.
Výpis všetkých commitov
Najprv si ukážeme zobrazenie zoznamu všetkých commitov, vrátane ich identifikátorov, autorov, dátumu a času vykonania, príslušných správ commitu a zmien v súboroch
Zatiaľ čo príkaz git status umožňuje
skontrolovať pracovný adresár a pracovnú oblasť, git log
pracuje iba s potvrdenou históriou.
Spustením príkazu git log v repozitári laravel
dostaneme tento výpis:
MINGW64:/c/mygit/laravel IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x) $ git log commit 036ea83da2afba28163a1f959a227cda7bd14a88 (HEAD -> 10.x, tag: easy_tag, tag: annotated_tag, origin/HEAD, origin/10.x) Author: Nuno Maduro <[email protected]> Date: Tue Oct 17 14:17:21 2023 +0100 Uses `actions/checkout@v4` commit 25070a3ffb175c15b59cd7f12289a9648165bba3 Author: Martin Bastien <[email protected]> Date: Tue Sep 26 21:37:09 2023 -0400 Fix typo in the comment for token prefix (sanctum config) (#6248) commit 960ea7b325e3ec43c8e795da307f354e61941a66 Author: Taylor Otwell <[email protected]> Date: Mon Sep 25 16:38:15 2023 -0500 Update README.md ... IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x) $
Klávesmi ↑ alebo ↓ si môžeme históriu commitov prezerať, stlačením klávesu q históriu zatvoríme.
Poďme si vysvetliť, čo nám Git píše:
commit <hash> (tag): Unikátny identifikátor (hash) daného commitu a jeho tag.Author: Autor commitu.Date: Dátum a časová zóna, kedy bol commit vytvorený.Update README.md: Tu môžeme vidieť názov a detailný popis commitu.
Uvedením atribútu --oneline zobrazíme každý commit v
skrátenej forme, zobrazí sa začiatok hashu a jeho názov.
Spustíme príkaz git log --oneline a dostaneme tento výpis
commitov v skrátenom formáte
<hash> <description>:
MINGW64:/c/mygit/laravel IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x) $ git log --oneline 036ea83d (HEAD -> 10.x, tag: easy_tag, tag: annotated_tag, origin/HEAD, origin/10.x) Uses `actions/checkout@v4` 25070a3f Fix typo in the comment for token prefix (sanctum config) (#6248) 960ea7b3 Update README.md 78243dda Update README.md ... IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x) $
Výstup príkazu git log môžeme obmedziť zahrnutím
-<commit_count>. Napríklad príkaz git log -3
zobrazí iba tri najnovšie commity.
Zobrazenie zmien v súboroch
Na zobrazenie zmien vykonaných v súboroch použijeme
atribút --stat. Spustíme príkaz git log --stat na
zobrazenie commitov so zmenami vykonanými v súboroch:
MINGW64:/c/mygit/laravel IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x) $ git log --stat commit 036ea83da2afba28163a1f959a227cda7bd14a88 (HEAD -> 10.x, tag: easy_tag, tag: annotated_tag, origin/HEAD, origin/10.x) Author: Nuno Maduro <[email protected]> Date: Tue Oct 17 14:17:21 2023 +0100 Uses `actions/checkout@v4` .github/workflows/tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) ... IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x) $
Použitím príkazu git log --stat -p získame podrobný
prehľad o vykonaných zmenách:
MINGW64:/c/mygit/laravel IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x) $ git log --stat -p commit 036ea83da2afba28163a1f959a227cda7bd14a88 (HEAD -> 10.x, tag: easy_tag, tag: annotated_tag, origin/HEAD, origin/10.x) Author: Nuno Maduro <[email protected]> Date: Tue Oct 17 14:17:21 2023 +0100 Uses `actions/checkout@v4` --- .github/workflows/tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index ebcd6854..0e0c54ec 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -25,7 +25,7 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup PHP uses: shivammathur/setup-php@v2 ... IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x) $
Filtrovanie histórie
Príkaz git log nám tiež umožňuje filtrovať históriu
podľa dátumu, autora, tagov
a súborov. Ukážme si filtrovanie podľa dátumu a
súboru.
Filtrovanie podľa dátumu
Na filtrovanie histórie podľa dátumu vytvorenia
použijeme príkaz
git log --oneline --after="<date>" --before="<date>":
Teraz si zobrazíme commity vytvorené v období medzi rokmi 2018 a 2020, zoradené od najnovších po najstaršie:
MINGW64:/c/mygit/laravel IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x) $ git log --oneline --after="2018-01-01" --before="2020-12-31" 919ea4ce update tests 7a2f389f Merge branch 'master' of github.com:laravel/laravel b1c8ffa1 Merge branch '8.x' 454f0e1a (tag: v8.5.6) Update CHANGELOG.md e8788a76 update cache ... IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x) $
Filtrovanie podľa súboru
Na filtrovanie podľa konkrétneho súboru použijeme
príkaz git log -- <file_name> a získame výpis všetkých
commitov, ktoré ovplyvňujú súbor README.md:
MINGW64:/c/mygit/laravel IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x) $ git log -- README.md commit 960ea7b325e3ec43c8e795da307f354e61941a66 Author: Taylor Otwell <[email protected]> Date: Mon Sep 25 16:38:15 2023 -0500 Update README.md commit 78243dda899443d478e2a555f8c94d023a2db633 Author: Taylor Otwell <[email protected]> Date: Mon Sep 25 16:29:45 2023 -0500 Update README.md IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x) $
Zobrazenie histórie vetiev
Príkazom git log --all --graph --oneline --decorate zobrazíme
celkovú históriu, z ktorej vyčítame priebeh zmien na
jednotlivých vetvách.
Zobrazíme si históriu vývoja repozitára /laravel vo forme
grafu, ktorý nám poskytuje prehľad o vývoji projektu:
MINGW64:/c/mygit/laravel IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x) $ git log --all --graph --oneline --decorate ... * 88695a7c Add PHP 8.3 to Tests Matrix (#6244) * 74c5a01b Let database handle default collation (#6241) | * 96fb350f (origin/master) Re-adds tinker (#6254) | * 645ab903 Fixes build of `dev-master` (#6252) | * 8dc6ced5 Merge branch '10.x' | |\ | | | * 07345458 (origin/revert-6240-revert-6239-10.x) Revert "Revert "Fix incorrect collation for MySQL 8 (#6239)" (#6240)" | |_|/ |/| | * | | 96d3ecf5 Revert "Fix incorrect collation for MySQL 8 (#6239)" (#6240) * | | c088b3b7 Fix incorrect collation for MySQL 8 (#6239) | |/ |/| * | bfead27a [10.x] Update sanctum config file (#6234) | | * 58077d04 (origin/slim-skeleton-11.x) update comment ... IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x) $
V ďalšej lekcii, Git - Skúmanie histórie - Dokončenie, dokončíme skúmanie histórie. Budeme sa zaoberať zoznamom všetkých vetiev, detailmi commitu, sledovaním a odstránením vykonaných zmien.
