git shortlog

Podsumowuje historię commitów pogrupowaną według autorów.

git shortlog bierze surowy git log i robi z niego czytelne podsumowanie pogrupowane według autorów: pod każdym nazwiskiem ląduje lista tytułów commitów. Domyślnie służy do generowania notatek do wydania (release notes), ale w praktyce najczęściej używasz go do szybkiej odpowiedzi na pytanie „kto i ile w tym repo nadłubał”. Działa wszędzie tam, gdzie masz gita: Linux, macOS, Windows.

Składnia i najważniejsze opcje

Podstawowa forma to git shortlog [opcje] [zakres-rewizji] [-- ścieżka...]. Bez podanego zakresu bierze całą historię prowadzącą do HEAD.

  • -s, --summary — ukrywa tytuły commitów, pokazuje tylko liczbę commitów na autora.
  • -n, --numbered — sortuje malejąco wg liczby commitów zamiast alfabetycznie po autorze.
  • -e, --email — dokleja adres e-mail przy każdym autorze (przydatne, gdy ktoś commituje pod kilkoma nazwiskami).
  • -c, --committer — grupuje po committerze, a nie po autorze (różnica liczy się przy cherry-pick, rebase, mergach).
  • --format= — zamiast tytułu użyj dowolnego formatu z git log, np. --format='%h %s'.
  • -w[szerokość,wcięcie1,wcięcie2] — zawija długie linie; -w0 wcina bez zawijania.

Przykłady użycia

  • git shortlog -sn — klasyczny ranking: kto ile commitów, posortowany od największego. To polecenie, które zapamiętasz na lata.
  • git shortlog -sne — to samo plus e-maile, idealne do wyłapania tej samej osoby pod dwoma adresami.
  • git shortlog — pełne podsumowanie z tytułami commitów pogrupowanymi po autorze, gotowe do wklejenia w changelog.
  • git shortlog -sn v1.0..v2.0 — kto ile dorzucił między dwoma tagami, czyli wkład do konkretnego wydania.
  • git shortlog -sn -- src/ — ranking autorów ograniczony do zmian w katalogu src/.

Częste błędy i pułapki

Najczęstsza wpadka: ten sam człowiek pojawia się dwa razy, bo raz commitował jako „Jan”, raz jako „jan k”. Lekarstwem jest plik .mailmap w katalogu głównym repo, który scala nazwiska i e-maile do jednej formy. Druga rzecz: git shortlog liczy commity, nie linie kodu ani jakość, więc to kiepski miernik produktywności (jeden sensowny commit bije sto z literówkami). Pamiętaj też o różnicy --author vs --committer: po rebase czy cherry-picku committer to często ktoś inny niż autor, a domyślnie grupowanie idzie po autorze. I drobiazg: jeśli odpalisz git shortlog bez zakresu i podasz mu dane na standardowe wejście (np. przez git log --pretty=short | git shortlog), zignoruje bieżące repo i podsumuje to, co dostał.

Powiązane komendy: git log, git blame, git shortlog --group, git author (przez --author w git log).