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 log
pro výpis všech commitů, zobrazení změn v souborech, filtrování historie a zobrazení historie větví,git branch
pro zobrazení seznamu větví,git show
pro zobrazení detailů commitu,git diff
pro 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.Author
značí autora commitu.Date
př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.