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 Git tutoriále 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
repositári Laravel z lekcie Git – Základy –
Dokončenie. Otvoríme terminál MinTTY
a pomocou príkazu
cd laravel
sa do repositára presunieme.
Identifikácia commitov
V Git 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 commit.
- 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 repositára a prevedení prvého
commitu vytvárame hlavnú vetvu s názvom master
alebo main
.
Názov hlavnej vetvy je obvykle nastavený pri inštalácii Gitu a je možné ho neskôr premenovať. V budúcich 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é míľniky. 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
repositá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ť unikátny 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. Teda slúži iba ako ukazovateľ na commit. Na
jeho vytvorenie 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 repositára do určitého bodu v histórii. Git poskytuje tieto kľúčové príkazy:
git log
pre výpis všetkých commitov, zobrazenie zmien v súboroch, filtrovanie histórie a zobrazenie histórie vetiev.git branch
pre zobrazenie zoznamu vetiev.git show
na zobrazenie detailov commitu.git diff
na 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 repositá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 hasha a jeho názov.
Spustíme príkaz git log --oneline
a dostaneme tento výpis
commitov v skrátenej 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 sa použije
atribút --stat
. Spustíme príkaz git log --stat
na
zobrazenie commitov so zmenami vykonaných 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ých 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
Pre 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 repositá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 budúcej 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.