Git

Historia zmian danej funkcji w Git

Jeśli używamy Gita na pewno znamy polecenie

git log

które to wyświetla nam historię zmian w repozytorium. Jednak polecenie to ma pewną ciekawą możliwość, którą daje nam przełącznik -L. Mianowicie wówczas możemy podać nazwę metody oraz nazwę pliku i wyświetli nam się cała historia, ale dotycząca zmian w tej konkretnej metodzie. Jest to naprawdę wygodne, gdy chcemy dokładnie przyjrzeć się zmianom tylko w jednym miejscu bez przedzierania się przez rozbudowane porównywanie i całe pliki. Mój przykładowy plik Demo.cs wygląda tak:

using System;

public class Demo
{
	public void Demo()
	{
		// Here is the third change
	}
}

Wywołanie polecenia gita:

git log -L :Demo:Demo.cs

Zwróci coś takiego:

commit b37ad38a5ebc75e0b54f036e137832368fae754f
Author: Maga 
Date:   Sun Apr 16 21:50:47 2017 +0200

    next change

diff --git a/Demo.cs b/Demo.cs
--- a/Demo.cs
+++ b/Demo.cs
@@ -3,7 +3,7 @@
 public class Demo
 {
-       public static void Main()
+       public void Demo()
        {
                // Here is the third change
        }
 }
\ No newline at end of file

commit fadf9afd23f8008e3514f183a9873442dcd597d1
Author: Maga 
Date:   Sun Apr 16 21:50:25 2017 +0200

    next change

diff --git a/Demo.cs b/Demo.cs
--- a/Demo.cs
+++ b/Demo.cs
@@ -3,7 +3,7 @@
 public class Demo
 {
        public static void Main()
        {
-               // Here is the second change
+               // Here is the third change
        }
 }
\ No newline at end of file

commit be56749b09a606f0137c993d0df03fa336e88701
Author: Maga 
Date:   Sun Apr 16 21:48:03 2017 +0200

    Second change

diff --git a/Demo.cs b/Demo.cs
--- a/Demo.cs
+++ b/Demo.cs
@@ -3,7 +3,7 @@
 public class Demo
 {
        public static void Main()
        {
:
 {
        public static void Main()
        {
-               // Here is the second change
+               // Here is the third change
        }
 }
\ No newline at end of file

commit be56749b09a606f0137c993d0df03fa336e88701
Author: Maga 
Date:   Sun Apr 16 21:48:03 2017 +0200

    Second change

diff --git a/Demo.cs b/Demo.cs
--- a/Demo.cs
+++ b/Demo.cs
@@ -3,7 +3,7 @@
 public class Demo
 {
        public static void Main()
        {
-               // Here is the first change
+               // Here is the second change
        }
 }
\ No newline at end of file

commit bb7f033cdc9edce4eed0f7c30031b50d2cfc99d5
Author: Maga 
Date:   Sun Apr 16 21:47:46 2017 +0200

    First change

diff --git a/Demo.cs b/Demo.cs
--- a/Demo.cs
+++ b/Demo.cs
@@ -0,0 +3,7 @@
+public class Demo
+{
+       public static void Main()
+       {
+               // Here is the first change
+       }
+}

Są tutaj zmiany uporządkowane od najnowszych od najstarszych. W moim demonstracyjnym przypadku zmiany polegały jedynie na zmianie komentarza a następnie nazwy metody, ale oczywiście w prawdziwych plikach będzie tego dużo więcej. W konsoli jest to oczywiście wszystko podświetlone – zmiany usunięte są napisane czerwoną czcionką dodane zieloną.

6 myśli na temat “Historia zmian danej funkcji w Git”

  1. Wow, nie wiedziałem że sam git „rozumie” składnię C#.

    W Visual Studio jest fajny feature „Code Lens” który to chyba wykorzystuje do wyświetlania nad metodami historii zmian. Zauważyłem tylko że wiele osób go wyłącza od razu po instalacji. A szkoda, bo jak się zerka w historię, to można znacznie lepiej ukierunkować swoje codzienne pretensje 😉

  2. Ludzie wyłączają CodeLens bo spowalnia pracę VS. Jak ktoś ma R# to CodeLens niespecjalnie się przydaje. Jednakże jedyny atut to właśnie historia jednej funkcji… :-)

  3. Git bash + Tortoise Git to według mnie combo idealne 😉 Przeglądanie logów i bardziej skomplikowane mergowanie zostawiam sobie dla Tortoisa, a reszta prostych poleceń w konsoli.

  4. A dlaczego nie korzystasz z wbudowanego klienta GIT w VS (nawet wersja Community go ma)? Wtedy wszystko jest piękne i kolorowe. Nie wiem czy da się sprawdzić akurat zmiany w konkretnej metodzie, ale to akurat nie problem bo widać zmiany w pliku, więc po przejściu do metody zobaczysz zmiany, które dotyczyły jej.

  5. Jakoś w kwestii Gita wolę konsolę:) Czasem korzystam z tego wbudowanego klienta, ale raczej przy merge’ach.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *