[[oktatas:programozás:verziókontroll:git|< Git]]
====== git diff ======
* **Szerző:** Sallai András
* Copyright (c) 2021, Sallai András
* Szerkesztve: 2021, 2023
* Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC BY-SA 4.0]]
* Web: https://szit.hu
===== A git diff =====
A változásokat a diff paranccsal tudjuk megnézni.
Például:
git diff
Így önmagában kiadva az utolsó commit óta változtatásainkat láthatjuk. Ha már staged állapotba
tettünk egy fájl, ezek nem látszanak.
Ha a staged állapotú fájlokat is szeretnénk látni, használjuk --cached
kapcsolót:
git diff --cached
Ha elvégezzük a commit-ot, akkor már itt sem látszik a különbség. Ebben az esetben meg kell adni annak a két commit-nak az azonosítóját, ami között szeretnénk a különbséget látni. Például:
git diff 367a 5494
Több commit közötti különbséget is megnézhetünk. Mindig az elsőként megadott commit-hoz történik a hasonlítás.
===== Csak fájlnevek =====
Ha csak azt szeretnénk látni, milyen fájlok változtak:
git diff --name-only
===== Szűrők =====
A szűrők a --diff-filter kapcsolóval állíthatók be.
* ezt szeretnénk látni
* A - hozzáadott fájlok
* C - másolt fájlok
* D - törölt fájlok
* M - megváltozott
* R - átnevezett fájlok
* T - változott a típusa - egyszerű fájl, szimbolikus link
* U - nem egybeolvasztott
* X - ismeretlen
* B - megszakadt a párosításuk
* * - minden egyben
* Kizárás - nem szeretnék a találatok között látni:
* a - hozzáadott fájlok kizárva
* d - törölt fájlok kizárva
Példa a törölt fájlok kizárására:
git diff --diff-filter=d HEAD^..
===== Változott sorok száma =====
Szintaxis:
git diff --stat commit1 commit2
Példák:
git diff --stat 887a e671
git --no-pager diff --stat 887a e671
git diff --stat 887a HEAD^
git --no-pager diff --stat 887a HEAD^
===== Forrás =====
* man git-diff
===== Diff gyakorlat 01 =====
Készítsünk egy hellodiff projektkönyvtárat, majd lépjünk be a könyvtárba.
mkdir hellodiff
cd hellodiff
Hozzunk létre egy gyumolcsok.txt nevű fájlt.
Írjuk bele az alma szót.
alma
Készítsünk Git tárolót és tároljuk az állományt:
git init
git add gyumolcsok.txt
git commit -m "Kezdés"
Most adjuk az almához egy körtét:
alma
körte
Mentsük el, és nézzük meg az eredményt:
git diff
A lehetséges kimenet:
$ git diff
diff --git a/gyumolcsok.txt b/gyumolcsok.txt
index 9c9acdc..2b93b27 100644
--- a/gyumolcsok.txt
+++ b/gyumolcsok.txt
@@ -1 +1,2 @@
alma
+körte
Most adjuk helyezzük újra stage állapotba a gyumolcsok.txt állományba:
git add gyumolcsok.txt
Ha újra megnézzük a különbségeket, nem találunk:
git diff
Most használjuk a --cached kapcsolót.
git diff --cached
Újra látszik a különbség:
$ git diff --cached
diff --git a/gyumolcsok.txt b/gyumolcsok.txt
index 9c9acdc..2b93b27 100644
--- a/gyumolcsok.txt
+++ b/gyumolcsok.txt
@@ -1 +1,2 @@
alma
+körte
Commit után a diff újra nem mutat semmit a --cached kapcsolóval sem.
A diff nem tudja mihez képest kellene különbséget mutatnia.
Ha most megadjuk a két commit azonosítóját, akkor a különbség újra látszik. Nem szükséges a teljes azonosító megadása, adjunk meg most 4 karaktert mindkét commit-ból:
git diff 367a 5494
diff --git a/gyumolcsok.txt b/gyumolcsok.txt
index 9c9acdc..2b93b27 100644
--- a/gyumolcsok.txt
+++ b/gyumolcsok.txt
@@ -1 +1,2 @@
alma
+körte
===== Diff gyakorlat 02 =====
Készítsünk egy Python programot, ami gyümölcsök neveit írja a képernyőre.
Először csak az "alma" szót írassuk ki:
print('alma')
Készítsünk Git tárolót a projektből, majd tároljunk egy pillanatképet:
git init
git status -u
git add .
git status
git commit -m "Kezdés"
Most fejlesszük tovább a programunkat. Most írassuk ki a "körte" szót is:
print('alma')
print('körte')
Most futtassuk a git diff parancsot:
git diff
Lehetséges kimenet:
$ git diff
diff --git a/main.py b/main.py
index 88af617..8854325 100644
--- a/main.py
+++ b/main.py
@@ -1 +1,2 @@
print('alma')
+print('körte')
Ha tároljuk a változásokat a szimpla git diff parancs hatására már nem látszanak a változások.
Ha szeretnénk ezek után megnézni a különbségeket, meg kell mondanunk, hogy mihez képest. A git log paranccsal nézzük meg a commitok azonosítóját:
git --no-pager log --oneline
Lehetséges kimenet:
git --no-pager log --oneline
138c5b6 (HEAD -> master) Körte hozzáadva
15e1a71 Kezdés
A különbséget a "Kezdés" óta szeretnénk megnézni, ezért írjuk a következőt:
git --no-pager diff 15e1
Lehetséges kimenet:
git --no-pager diff 15e1
diff --git a/main.py b/main.py
index 88af617..8854325 100644
--- a/main.py
+++ b/main.py
@@ -1 +1,2 @@
print('alma')
+print('körte')