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

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

Jeśli spodobał Ci się ten wpis i chcesz otrzymywać powiadomienia o nowych treściach dotyczących zagadnień związanych z Gitem, to zachęcam do subskrypcji mojego bloga.

1 thought on “Git log – dodatkowe opcje, które warto znać

  1. Pingback: dotnetomaniak.pl

Dodaj komentarz

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