Lekce 5 - Git - Zkoumání historie
V předchozím kvízu, Kvíz - Principy, instalace a základy Gitu, jsme si ověřili nabyté zkušenosti z předchozích lekcí.
V dnešním Git tutoriálu se budeme zabývat identifikací commitů a začneme zkoumat historii. Vypíšeme si všechny commity, zobrazíme změny v souborech, vyfiltrujeme historii a zobrazíme historii větví.
Všechny příkazy budeme zkoušet v našem naklonovaném
repozitáři laravel z lekce Git - Základy -
Dokončení. Otevřeme terminál MinTTY a pomocí příkazu
cd laravel se do repozitáře přesuneme.
Identifikace commitů
V Gitu je možné commit identifikovat různými způsoby, což nám umožňuje jednoznačně určit konkrétní commit. Mezi klíčové metody identifikace patří:
- hash commitu,
- jméno větve,
- tag.
Hash commitu
Jak již bylo zmíněno v předchozích lekcích, každý commit je
definován svým hashem. Jedná se o 40místné
hexadecimální číslo, například
036ea83da2afba28163a1f959a227cda7bd14a88. Toto číslo je
jedinečné pro každý commit. Pro identifikaci commitu však nemusíme toto
číslo psát celé, stačí pouze několik prvních znaků.
Jméno větve
Každá větev (branch) je složena minimálně z jednoho
commitu. Při vytvoření nového lokálního repozitáře a provedení prvního
commitu vytváříme hlavní větev s názvem
master nebo main.
Název hlavní větve je obvykle nastaven při instalaci Gitu a lze jej později přejmenovat. V budoucích lekcích se budeme větvím věnovat podrobněji.
Tag
Tag slouží k označení důležitých bodů v historii
projektu, jako jsou nové verze, důležité opravy
chyb nebo klíčové milníky. Můžeme je přidávat
k libovolnému commitu. Seznam všech tagů v repozitáři lze vypsat pomocí
příkazu git tag, který je následován výpisem tagů
seřazených abecedně.
Nyní příkazem git tag zobrazíme všechny vytvořené tagy v
repozitáři laravel seřazené abecedně:
MINGW64:/c/mujgit/laravel ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit/laravel (10.x) $ git tag v10.0.0 v10.0.1 v10.0.2 ... ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit/laravel (10.x) $
Klávesami ↑ nebo ↓ si můžeme seznam tagů prohlížet. Stisknutím klávesy q seznam zavřeme.
Každý tag musí mít unikátní název. Každý nově vytvořený tag je automaticky připojen k aktuálnímu commitu. Git umožňuje vytvořit lehký nebo anotovaný tag.
Lehký tag
Lehký tag se velmi podobá větvi, pouze s tím rozdílem, že se
nepřemisťuje. Slouží tedy pouze jako ukazatel na commit.
Pro vytvoření tagu stačí vytvořit nebo se přepnout na commit, který
chceme označit, a zadat příkaz git tag <nazev tagu>.
Pro aktuální commit vytvoříme nový tag s názvem
lehky_tag:
MINGW64:/c/mujgit/laravel ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit/laravel (10.x) $ git tag lehky_tag ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit/laravel (10.x) $
Spuštěním příkazu git tag uvidíme náš nově vytvořený
tag:
MINGW64:/c/mujgit/laravel ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit/laravel (10.x) $ git tag lehky_tag v10.0.0 v10.0.1 v10.0.2 ... ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit/laravel (10.x) $
Anotovaný tag
Anotovaný tag je plnohodnotný objekt, srovnatelný s
commitem. Obsahuje všechny identifikační informace jako commit
(jméno autora, čas, hash) a můžeme k němu přidat zprávu. Pro jeho
vytvoření použijeme příkaz
git tag -a <nazev tagu> -m "<zpráva k tagu>".
K aktuálnímu commitu nyní vytvoříme anotovaný tag:
MINGW64:/c/mujgit/laravel ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit/laravel (10.x) $ git tag -a anotovany_tag -m "Vytvoření anotovaného tagu" ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit/laravel (10.x) $
Tag si opět ověříme příkazem git tag:
MINGW64:/c/mujgit/laravel ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit/laravel (10.x) $ git tag anotovany_tag lehky_tag v10.0.0 v10.0.1 v10.0.2 ... ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit/laravel (10.x) $
Zkoumání historie
Prohlížení historie je v Gitu jednou z nejdůležitějších operací, díky které máme možnost obnovit stav repozitáře do určitého bodu v historii. Git poskytuje tyto klíčové příkazy:
git logpro výpis všech commitů, zobrazení změn v souborech, filtrování historie a zobrazení historie větví,git branchpro zobrazení seznamu větví,git showpro zobrazení detailů commitu,git diffpro porovnání změn.
Dnes si ukážeme příkaz git log. S dalšími příkazy se
seznámíme později.
Příkaz git log
Příkazem git log můžeme vypsat všechny commity, zobrazit
změny v souborech, filtrovat historii a zobrazit historii větví.
Výpis všech commitů
Nejprve si ukážeme zobrazení seznamu všech commitů včetně jejich identifikátorů, autorů, data a času provedení, příslušných zpráv commitu a změn v souborech.
Zatímco příkaz git status umožňuje
zkontrolovat pracovní adresář a pracovní oblast, git log
pracuje pouze s potvrzenou historií.
Spuštěním příkazu git log v repozitáři
laravel dostaneme tento výpis:
MINGW64:/c/mujgit/laravel ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit/laravel (10.x) $ git log commit 036ea83da2afba28163a1f959a227cda7bd14a88 (HEAD -> 10.x, tag: lehky_tag, tag: anotovany_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 ... ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit/laravel (10.x) $
Klávesami ↑ nebo ↓ si můžeme historii commitů prohlížet, stisknutím klávesy q historii zavřeme.
Pojďme si vysvětlit, co nám Git píše:
commit <hash> (tag)je unikátní identifikátor (hash) daného commitu a jeho tag.Authorznačí autora commitu.Datepředstavuje datum a časovou zónu, kdy byl commit vytvořen.Update README.md: Zde můžeme vidět název a detailní popis commitu.
Uvedením atributu --oneline zobrazíme každý commit ve
zkrácené formě, zobrazí se začátek hashe a jeho název.
Spustíme příkaz git log --oneline a dostaneme tento výpis
commitů ve zkráceném formátu <hash> <název>:
MINGW64:/c/mujgit/laravel ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit/laravel (10.x) $ git log --oneline 036ea83d (HEAD -> 10.x, tag: lehky_tag, tag: anotovany_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 ... ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit/laravel (10.x) $
Výstup příkazu git log můžeme omezit zahrnutím
-<počet commitů>. Například příkaz
git log -3 zobrazí pouze tři nejnovější commity.
Zobrazení změn v souborech
Pro zobrazení změn provedených v souborech se použije
atribut --stat. Spustíme příkaz git log --stat k
zobrazení commitů se změnami provedenými v souborech:
MINGW64:/c/mujgit/laravel ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit/laravel (10.x) $ git log --stat commit 036ea83da2afba28163a1f959a227cda7bd14a88 (HEAD -> 10.x, tag: lehky_tag, tag: anotovany_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(-) ... ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit/laravel (10.x) $
Použitím příkazu git log --stat -p získáme podrobný
přehled o provedených změnách:
MINGW64:/c/mujgit/laravel ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit/laravel (10.x) $ git log --stat -p commit 036ea83da2afba28163a1f959a227cda7bd14a88 (HEAD -> 10.x, tag: lehky_tag, tag: anotovany_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 ... ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit/laravel (10.x) $
Filtrování historie
Příkaz git log nám také umožňuje filtrovat historii podle
data, autora, tagů a
souborů. Ukažme si filtrování podle data a souboru.
Filtrování podle data
Pro filtrování historie podle data vytvoření použijeme
příkaz
git log --oneline --after="<datum>" --before="<datum>":
Nyní si zobrazíme commity vytvořené v období mezi lety 2018 a 2020, seřazené od nejnovějších po nejstarší:
MINGW64:/c/mujgit/laravel ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit/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 ... ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit/laravel (10.x) $
Filtrování podle souboru
Pro filtrování podle konkrétního souboru použijeme
příkaz git log -- <název souboru>. My získáme výpis
všech commitů, které ovlivňují soubor README.md:
MINGW64:/c/mujgit/laravel ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit/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 ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit/laravel (10.x) $
Zobrazení historie větví
Příkazem git log --all --graph --oneline --decorate zobrazíme
celkovou historii, ze které vyčteme průběh změn na
jednotlivých větvích.
Zobrazíme si historii vývoje repozitáře /laravel ve formě
grafu, který nám poskytuje přehled o vývoji projektu:
MINGW64:/c/mujgit/laravel ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit/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 ... ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit/laravel (10.x) $
V příští lekci, Git - Zkoumání historie - Dokončení, dokončíme zkoumání historie. Budeme se zabývat seznamem všech větví, detaily commitu, sledováním a odstraněním provedených změn.
