Mikuláš je tu! Získaj 90 % extra kreditov ZADARMO s promo kódom CERTIK90 pri nákupe od 1 199 kreditov. Len do nedele 7. 12. 2025! Zisti viac:
NOVINKA: Najžiadanejšie rekvalifikačné kurzy teraz s 50% zľavou + kurz AI ZADARMO. Nečakaj, táto ponuka dlho nevydrží! Zisti viac:

6. diel - Git - Skúmanie histórie - Dokončenie

V predchádzajúcej lekcii, Git - Skúmanie histórie, sme sa zaoberali identifikáciou commitov a začali sme skúmať históriu. Vypísali sme si všetky commity, zobrazili zmeny v súboroch, vyfiltrovali históriu a zobrazili históriu vetiev.

V dnešnom ** tutoriáli Git** 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 po určitom commite.

Všetky príkazy si opäť 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 do repozitára presunieme.

Skúmanie histórie

V lekcii Skúmanie histórie sme začali skúmať históriu príkazom git log. Teraz si preberieme zostávajúce príkazy git branch, git show a git diff.

Príkaz git branch

Po príkaze git branch siahneme, ak chceme zobraziť zoznam všetkých vetiev v našom lokálnom repozitári. Napríklad miestne aj vzdialené vetvy zobrazíme príkazom git branch -a.

Teraz príkazom git branch -a zobrazíme výpis miestnych a vzdialených vetiev v repozitári /laravel:

MINGW64:/c/mygit/laravel
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x)
$ git branch -a
* 10.x
  remotes/origin/10.x
  remotes/origin/3.0
  remotes/origin/5.0
  ...
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x)
$

Aktuálna vetva, na ktorej sa práve nachádzame, je označená hviezdičkou. Pokiaľ chceme zobraziť ďalšie informácie o vetvách, ako je napríklad posledný commit na každej vetve, použijeme príkaz git branch -v:

MINGW64:/c/mygit/laravel
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x)
$ git branch -v
* 10.x 036ea83d Uses `actions/checkout@v4`

IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x)
$

Keďže sme pripojení k vzdialenému repozitáru, pozrime sa na zoznam všetkých vetiev na vzdialenom serveri pomocou príkazu git branch -r:

MINGW64:/c/mygit/laravel
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x)
$ git branch -r
  origin/10.x
  origin/3.0
  origin/5.0
  ...

IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x)
$

Príkaz git show

Jedným z kľúčových nástrojov je príkaz git show, ktorého spustením získame detaily commitu alebo objektu v repozitári Git. Spustením príkazu git show získame detaily posledného vytvoreného commitu:

MINGW64:/c/mygit/laravel
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x)
$ git show
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`

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)
$

Detaily obsahujú:

  • commit 036ea83da2afba28163a1f959a227cda7bd14a88: Jedná sa o unikátny hash commit.
  • HEAD -> 10.x: Označuje aktuálnu pozíciu v pracovnom adresári a názov vetvy.
  • tag: easy_tag, tag: annotated_tag: Tagy spojené s commitom.
  • origin/HEAD, origin/10.x: Označuje, že vzdialený repozitár má svoju vlastnú kópiu repozitára, ktorá obsahuje aktuálny commit a vetvu 10.x.
  • Author: Autor commitu.
  • Date: Dátum a časová zóna, kedy bol commit vytvorený.
  • Uses actions/checkout@v4: Informáciu o obsahu commitu.
  • diff --git ...: Ukazuje zmeny vykonané v určitých súboroch v rámci tohto commitu.

    Pre zobrazenie akéhokoľvek commitu použijeme buď jeho hash (git show <hash>), alebo jeho tag (git show <tag_name>).

Príkaz git diff

Pomocou príkazu git diff môžeme efektívne sledovať zmeny v pracovnom adresári a porovnať ich s aktuálnym stavom repozitára. Príkaz nám umožňuje zobraziť rozdiely medzi súbormi od posledného commitu. Príkaz je užitočný pri riešení konfliktov, ladení zmien a udržiavaní prehľadu o úpravách v projekte.

Syntax príkazu je:

$ git diff <arguments> <file_name>

Niektoré bežné argumenty používané s git diff zahŕňajú:

  • --staged: Ukáže rozdiely medzi indexom a posledným commitovaným stavom.
  • --color: Zobrazí výsledok s farbami na zvýraznenie zmien.
  • --name-only: Zobrazí iba názvy súborov, v ktorých boli vykonané zmeny.

Ukážeme si príkaz git diff na príklade, v ktorom postupne spustíme tieto príkazy:

$ echo 'New text to file' > test_file
$ git add .
$ git commit -m "Creating a new test file test_file"
$ echo 'Newly added text' >> test_file

Z príkazov dostaneme tieto výstupy:

MINGW64:/c/mygit/laravel
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x)
$ echo 'New text to file' > test_file
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x)
$ git add .
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x)
$ git commit -m "Creating a new test file test_file"
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x)
$ echo 'Newly added text' >> test_file
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x)
$

Teraz zobrazme zmeny vykonané v súbore test_file pomocou príkazu git diff <file_name>. Získame výpis rozdielu medzi starou a novou verziou súboru:

MINGW64:/c/mygit/laravel
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x)
$ git diff test_file
diff --git a/test_file b/test_file
index 18316c9a..6bfcf463 100644
--- a/test_file
+++ b/test_file
@@ -1 +1,2 @@
 New text to file
+Newly added text

Tu je rozbor jednotlivých častí:

  • diff --git a/test_file b/test_file: Označuje názvy porovnávaných súborov.
  • index 18316c9a..6bfcf463 100644: Označuje starú a novú hodnotu hash.
  • --- a/test_file: Označuje starú verziu súboru.
  • +++ b/test_file: Označuje novú verziu súboru.
  • @@ -1 +1,2 @@: Kontext zmien ukazujúci, že zmena bola vykonaná na riadku 1 a vložený bol 1 nový riadok.
  • New text to file: Pôvodný obsah súboru.
  • +Newly added text: Pridaný text, znak + na začiatku riadku signalizuje, že bola vykonaná nová zmena.

Na zobrazenie zmien medzi dvoma commitmi by sme použili príkaz git diff <commit_1> <commit_2>. Rozdiely medzi vetvami by sme vypísali príkazom git diff <branch_1>..<branch_2>.

Príkaz git reset

Príkaz git reset umožňuje vrátiť stav repozitára k určitému commitu. Týmto príkazom odstránime zmeny vykonané po určitom commite a vrátime sa k predchádzajúcemu stavu.

Zasahovanie do histórie repozitára môže byť nebezpečné. Zvyčajne je v poriadku vykonávať tieto druhy zmien vo vlastnom miestnom úložisku. Mali by sme sa však vyhnúť zmenám, ktoré prepisujú históriu do vzdialených úložísk.

Príkaz git reset má tieto argumenty, ktoré ovplyvňujú jeho správanie voči repozitáru:

  • --soft,
  • --mixed (predvolené správanie),
  • --hard.

--soft

Resetuje hlavičku (HEAD), ale pracovný strom a index zostanú nezmenené. Zmeny, ktoré boli vykonané po danom commite, zostanú v stave k dispozícii pre nový commit.

--mixed (predvolené správanie)

Resetuje hlavičku (HEAD) a pracovný strom, ale index zostáva nezmenený. Zmeny po danom commite nebudú súčasťou nasledujúceho commitu, ale zostanú v stave k dispozícii na ďalšie úpravy.

--hard

Resetuje hlavičku (HEAD), pracovný strom a index. Zmeny po danom commite budú odstránené a vrátia sa k presnému stavu repozitára v danom commite.

Argument --hard môže spôsobiť trvalú stratu zmien vykonaných po danom commite.

Nasledujúci obrázok popisuje, ako presne príkaz git reset funguje:

Vizualizácia git reset - Git

Teraz spustíme príkaz ls alebo dir a zobrazíme stav súborov nášho repozitára:

MINGW64:/c/mygit/laravel
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x)
$ ls
CHANGELOG.md  bootstrap/     package.json  routes/ README.md     composer.json  phpunit.xml   storage/
app/          config/        public/       tests/  artisan*      database/      resources/    vite.config.js
test_file
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x)
$

Teraz si ukážeme, ako použiť príkaz reset --hard na obnovenie nášho repozitára do stavu pred tým, ako sme vytvorili súbor test_file.

  1. Spustíme príkaz git log a získame hash commitu, na ktorý chceme resetovať náš repozitár.
  2. Následne použijeme tento hash v spojení s príkazom git reset --hard 036ea83da2afba28163a1f959a227cda7bd14a88 na obnovenie repozitára do príslušného stavu.
  3. Spustením príkazu git log uvidíme, že posledný commit bol zmazaný a spoločne s ním všetky zmeny.

Po vykonaní reset --hard bude z repozitára vymazaný test_file. Overíme si to príkazom ls alebo dir:

MINGW64:/c/mygit/laravel
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x)
$ ls
CHANGELOG.md  bootstrap/     package.json  routes/ README.md     composer.json  phpunit.xml   storage/
app/          config/        public/       tests/  artisan*      database/      resources/    vite.config.js
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x)
$

V ďalšej lekcii, Git - Správa vetiev, sa pozrieme na vetvy. Vysvetlíme si, prečo sa nimi zaoberáme a čo nám do vývoja prinášajú. Ukážeme si, ako sa s vetvami pracuje.


 

Predchádzajúci článok
Git - Skúmanie histórie
Všetky články v sekcii
Git
Preskočiť článok
(neodporúčame)
Git - Správa vetiev
Článok pre vás napísal Filip Studený
Avatar
Užívateľské hodnotenie:
225 hlasov
.
Aktivity