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ą.

Git – triki – autokorekta

Zdarza wam się czasem napisać

git puhs

albo

git commti

w dzikim szale kodowania, kiedy już nie możecie się doczekać, by wreszcie wrzucić swój kod na serwer?

Mnie często i okazuje się, że git oprócz standardowego powiadamiania, które zapewne znacie czyli:

$ git puhs
git: 'puhs' is not a git command. See 'git --help'.

Did you mean this?
push

Posiada również opcję wykonania automatycznie komendy, której się domyślił.

Wystarczy wpisać w konsoli:

git config --global help.autocorrect 30

lub w pliku .gitconfig w folderze użytkownika umieścić następującą sekcję:

[help]
autocorrect = 30

Wówczas jeśli się pomylimy zobaczymy coś takiego:

$ git puhs
WARNING: You called a Git command named 'puhs', which does not exist.
Continuing under the assumption that you meant 'push'
in 3.0 seconds automatically...

Ta magiczna liczba 30 to po prostu parametr, którym określamy po jakim czasie Git ma zareagować i uruchomić komendę, której się domyślił. Oczywiście możemy to parametryzować dowolnie.

Warto jeszcze wiedzieć, że ta magia zadziała tylko, gdy Git będzie miał do wyboru jedną komendę. Te pomyłki, które wymieniłam są dość łatwe do domyślenia się, jednak gdybyśmy wpisali:

git st

Git zachowa się tak samo jak zawsze czyli

git: 'st' is not a git command. See 'git --help'.

Did you mean one of these?
status
reset
stage
stash
svn

.gitignore

Świetny zbiór szablonów plików .gitignore dla różnych języków – http://github.com/github/gitignore

Korzystam i polecam.

Gdyby ktoś chciał szybko i sprawnie ściągnąć plik .gitignore do projektów tworzonych w Visual Studio, to tutaj jest link do konkretnego pliku: http://github.com/github/gitignore/blob/master/VisualStudio.gitignore