Git log – dodatkowe opcje, które warto znać

Opublikowane przez Tomasz Prasołek w dniu

Kolejny wpis opisujący polecenie git log. Dzisiaj jednak już nie będziemy dalej dostosowywać wyglądu loga do własnych potrzeb. Skoro już go mamy dostosowanego, to teraz pora na wyciągnięcie z niego więcej danych. Polecenie git log ma dużo opcji, kilka z nich chciałem przedstawić w tym wpisie.

Tak jak w jednym z poprzednich wpisów, wszystkie przykłady będą pokazywane na repozytorium kodu źródłowego gita. W przykładach będzie wpisywał polecenie git log z odpowiednimi opcjami, jednak na zrzutach ekranu będę korzystał z własnego aliasu git lg (ustawionego na polecenie git log). Jak dodać alias pisałem na końcu wpisu: Jak sformatowatować loga według własnych preferencji – opcja pretty.

Git log – opcje

-p / -u / –patch

Każda z tych opcji jest tożsama. Pokazuje dodatkowo w logu jakie zmiany (diff) w plikach nastąpiły w poszczególnych commitach.

git log -p

git log --patch

— stat

Pokazuje pliki, które zostały zmienione wraz z liczbą dodanych i usuniętych linii w kodzie. Podaje również podsumowanie z informacją ile plików zostało zmienionych, ile linii we wszystkich plikach zostało dodanych bądź usuniętych.

git log --stat

git log --stat

–no-merges

Domyślnie w logu są pokazywane tzw. merge commits, czyli commity mające dwóch rodziców powstałe w wyniku operacji merge. Jeśli nie chcemy ich widzieć to możemy używać właśnie tej opcji.

git log --no-merges

Najpierw zobaczmy jak wygląda log bez tej opcji:

git log

A teraz bez merge commits:

git log --no-merges

Widać, że nie widać 🙂 kilku commitów z pierwszego zrzutu ekranu.

Filtry

Log można filtrować na kilka sposobów.

Liczba commitów (ostatnich)
git log -15

Podstawowy filtr, służy do pokazania określonej liczby commitów. Użyłem go przy pokazywaniu opcji --no-merges, aby pokazać tylko określoną liczbę commitów.

Data

Możemy filtrować oczywiście po dacie. Jeśli chcemy zobaczyć commity od konkretnej daty to używamy opcji:

git log --after="2018-9-2"

Dla osiągnięcia tego samego efektu możemy również użyć zapisy względnego (pierwszy szkic tego postu był pisany 9 września):

git log --after="1 week ago"

Jeśli chcemy historię z konkretnego przedziału to wtedy używamy 2 opcji:

git log --after="2018-8-1" --before="2018-9-1"
Autor

Jeśli chcesz dowiedzieć się co robiła konkretna osoba z Twojego zespołu to użyj opcji filtra –author:

git log --author="Jeff King"

git log --author

Informacja zawarta w commit message

Do przeszukiwania informacji wpisanych przy commicie służy opcja --grep.

git log --grep="tests"

UWAGA! Jeśli korzystacie z opcji –oneline lub z aliasu który pokazuje informacje w jednej linii, to może się okazać, że wyszukiwanego słowa nie widać w opisie commita.

git log grep

Jak widać pierwszy commit w opisie nie ma słowa “tests”. Jednak jeśli przyjrzymy się temu commitowi dokładniej:

git show 28d294a5e

git show

To widać, że w pełnej informacji się już znajduje. Dlatego nasz commit został pokazany.

Historia wybranych plików

Żeby przejrzeć historię konkretnego pliku wystarczy podać jego ścieżkę po 2 znakach myślnika --. Te dwa znaki oznaczają, że po nim zostaną podane ścieżki do plików, nie żadne inne opcje lub nazwy np. branchy.

git log -- git-rebase.sh

git log -- file

Wyszukiwanie w pliku

Ta opcja to nie jest standardowe wyszukiwanie w treści plików. Nie pokaże plików, w których występuje wyszukiwany tekst. Ta opcja wyszukuje wystąpień podanego słowa, która zostały dodane do pliku lub z niego usunięte. Czyli pokaże pierwszy commit, gdzie to słowo zostało dodane lub commit, z którego właśnie zostało usunięte.

git log -S "Our searched text"

Garść statystyk

Załóżmy że chcemy się dowiedzieć kto dodał najwięcej commitów w naszym repozytorium. Możemy do tego użyć polecenia shortlog. To jest już inne polecenie niż log, ale ma tylko kilka opcji, więc postanowiłem o tym tutaj wspomnieć.

git shortlog

Powyższe polecenie pokaże Nam ile kto zrobił commitów wraz ze wszystkimi commit message. Dane są posortowane alfabetycznie po nazwie autora.

git shortlog

W przypadku takiego dużego repozytorium ciężko będzie coś się z tego w szybki sposób dowiedzieć. Użyjmy opcji -n.

git shortlog -n

git shortlog -n

Teraz mamy posortowane informacje według liczby commitów. Widać, że najwięcej pracy włożył Junio C Hamano. Zrobił on ponad 19 tys. commitów 🙂 Jednak pod spodem mamy wypisane wszystkie jego commity. Jak można się dowiedzieć kto jest jeszcze w czołówce? Teraz dodamy opcję -s.

git shortlog -n -s

git shortlog -n -s

Teraz widzimy już tylko autora wraz z liczbą jego commitów.

Podsumowanie

Polecenie git log ma dużo różnych opcji. Wydaje mi się, że w tym poście przedstawiłem najbardziej przydatne i najciekawsze (moim zdaniem). Git shortlog za często się nie przyda, ale fajnie jest czasami spojrzeć w takie dane 🙂 Jeśli korzystasz jeszcze z jakichś innych opcji, to daj znać w komentarzu.

Źródła:
https://git-scm.com/docs/git-log
https://medium.com/the-andela-way/exploring-the-git-log-command-9117b9ff3c2c
https://git-scm.com/docs/git-shortlog


1 Komentarz

dotnetomaniak.pl · 26 września 2018 o 7 h 12 min

Git log – dodatkowe opcje, które warto znać – Tomasz Prasołek

Dziękujemy za dodanie artykułu – Trackback z dotnetomaniak.pl

Dodaj komentarz

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