Warning: Creating default object from empty value in /chroot/home/zerotohe/zerotohero.hu/html/wp-content/themes/salient/nectar/redux-framework/ReduxCore/inc/class.redux_filesystem.php on line 29
git-diff | zeroToHero

git-diff

By 2014.10.18Git


Sziasztok!

Legutóbb megnéztük, hogy hogyan lehet új repository-t létrehozni lokális környezetben, és abban fájlokat kezelni. A legalapvetőbb műveleteket ismertük meg:

  1. Hozzáadás
  2. Módosítás
  3. Törlés

A továbbiakban is még lokális környezetben fogunk dolgozni, ugyanis fontos, hogy minél több dolgot megismerjünk, mielőtt csapatmunkában vennénk részt, és valami olyasmit tennénk, ami miatt sokan csúnyán néznének ránk. :)

Verziók közötti különbségek

Tipikus esete annak, amikor szükségünk van két verzió közötti különbség megnézésére, amikor valamit lefejlesztettünk és megnéztünk, hogy minden tök jól működik, majd tovább fejlesztettünk, és az alkalmazást kattingatva a tesztelés során rájöttünk, hogy valami azért mégsem kerek, ugyanis valami már nem működik jól. Ilyenkor általában felmerül a kérdés, hogy mi változott?

Ebben az esetben nekiesünk megjavítani a dolgot, kikutatni a problémát, ami eléggé időigényes is lehet, ugyanis nem tudjuk pontosan mi változhatott, nem igazán számítottunk hibára. Amikor korábbi verziókat keresünk, akkor az IDE is alkalmas lehet megmutatni a változtatásokat, de a végtelenségig nem képes rá, így evidens lehet, hogy a verziókezelő mi másra is való mint verziókat kezelni, és a verziók közötti különbségeket megmutatni nekünk. Nézzük meg, hogyan is használhatjuk ezt a feature-t.

Hozzunk létre egy új lokális repository-t, és hozzunk létre egy Main.java fájlt üresen, majd commitoljuk. Aztán módosítsuk ezt a fájlt:

        public class Main {
    		public static void main(String[] args) {
        			System.out.println("Hello, World");
    		}
	}

majd commitoljuk be, majd módosítsuk újra, de most ne commitoljunk:

        public class Main {
    		public static void main(String[] args) {
        			System.out.println("Hello, Világ");
    		}
	}

Anélkül, hogy commitoltunk volna, meg tudjuk nézni, hogy mi változott, ugyanis ha a

	git status

parancsot kiadjuk, akkor a git már érzékeli, hogy módosítottunk a fájlon. Hogyan is nézhetjük meg a változásokat?

	git diff --word-diff=color

Megjegyzés: Kihagyható a –word-diff=color kapcsoló, akkor az egész sorokra mutatja meg a különbségeket, és nem színez. Tegyük fel, hogy tetszik nekünk amit látunk, így commitoljuk be a fájlt.

	git commit –a –m "Main.java outputra írt szöveg magyarítása."

Megjegyzés: A –a kapcsoló hozzáadja a commithoz a módosításokat, az összeset, de azokat a fájlokat, amelyek nem szerepelnek még a repository-ban, azokat nem adja hozzá a commithoz, maradnak érintetlenek.
Gondolom most fölmerül a kérdés, hogy hogyan is lehet megnézni két commit közötti különbségeket. A bemutatáshoz, módosítsunk még egyszer a Main.java fájlon:

	        		System.out.print("Hello ");
        			System.out.println(", Vilag");

majd commitoljunk:

	git commit –a –m”Main.java outputra írt szöveg módjának bonyolítása”

Ha megnézzük a git log eredményét, akkor látjuk, hogy négy commit van. Tegyük fel, hogy szeretnénk látni az utolsó és az azt megelőző commithoz tartozó Main.java fájl módosulásait:

	git diff HEAD~1 HEAD~0 --word-diff=color Main.java

Zöld színnel jeleníti meg az utolsó commithoz tartozó módosítást, az új feljesztés, és pirossal a korábbi verziót. Tehát piros ami volt, és zöld ami lett. :) Nézzük meg a négy commitból a két középső commitok közötti különbségeket a Main.java fájlra vonatkozóan:

	git diff HEAD~2 HEAD~1 --word-diff=color Main.java

Majd végül nézzük meg az utolsó commit és az időrendben másodjára történt commit közötti különbségeket:

	git diff HEAD~2 HEAD~0 Main.java

HEAD

A HEAD – et úgy képzeljük el mint egy pointert. Ha megnézzük a git log eredményét, akkor láthatunk egy commit hash-t. Ez a hash az alapján készül, hogy mi tartozik egy adott commithoz. Tehát azon fájlok alapján készül, ami épp bekerült vagy módosult. Adjuk ki a következő parancsot:

	git reflog

Ennek eredményeképpen látni fogjuk, a commit hash első 7 karakterét, és a HEAD pointereket, hogy melyik hová mutat. A HEAD-ről most ennyit, később még beszélünk róla. Most csak ennyit jegyezzünk meg, hogy a reflog-gal ki lehet listázni, és hogy hogyan lehet használni a HEAD-et.

Azzal, hogy meg tudjuk nézni a verziók között módosításokat, hatékonyabban tudunk bugot keresni, és jobban meg tudjuk érteni, hogy mi történt a különböző verziók között. Ha csapatmunkában dolgozunk, akkor pedig elkerülhetetlen, hogy összevessük a különböző verziókat.