git log i git diff to potężne narzędzia do inspektowania historii i zmian, z wieloma opcjami do filtrowania, formatowania i porównywania. Wiedza o ich efektywnym użytkowaniu pomaga zrozumieć ewolucję codebase'u i precyzyjnie przejrzeć zmiany.
git log — eksplorowanie historii
git log --oneline # compact (one line per commit)
git log --oneline --graph --all # visual branch graph of ALL branches
git log -p # show the DIFF of each commit (patches)
git log --stat # files changed + insertion/deletion counts
# FILTERING
git log --author="Ann" # commits by an author
git log --since="2 weeks ago" # by date
git log --grep="login" # commits whose MESSAGE matches
git log -S"functionName" # commits that ADDED/REMOVED this code (pickaxe!)
git log <file> # history of a specific file
git log main..feature # commits on feature not in main
Pickaxe (-S) jest szczególnie potężny — znajduje commity, które wprowadziły lub usunęły określony string, świetnie sprawdza się przy śledzeniu, kiedy kod się pojawił.
git diff — porównywanie zmian
git diff # working dir vs staged (unstaged changes)
git diff --staged # staged vs last commit (what will commit)
git diff HEAD # all changes vs the last commit
git diff main feature # differences between two branches
git diff <commit1> <commit2> # between two commits
git diff <commit> -- <file> # changes to a specific file
git diff --word-diff # word-level (not line-level) diff
Przydatne kombinacje
git log --oneline --graph --all → visualize the whole branch structure
git log -p -- <file> → full change history of a file (with diffs)
git log --follow <file> → file history across renames
git blame <file> + git show <commit> → who/when/why a line changed (trace context)
Dlaczego to ważne
Zrozumienie, jak efektywnie używać git log i git diff, jest wartościowe dla inspektowania historii i zmian, częstej potrzeby w developmencie, dlatego jest to przydatna praktyczna wiedza o Git. git log to sposób na eksplorowanie historii projektu — a znajomość jego opcji zmienia go z podstawowej listy w potężne narzędzie śledztwa: formatowanie (--oneline, --graph do wizualizacji struktury gałęzi, --stat do podsumowań zmian) i szczególnie filtrowanie (po autorze, dacie, wiadomości commitu z --grep, po pliku, po zakresie gałęzi, i potężny pickaxe -S, który znajduje commity, które dodały lub usunęły określony kod — nieoceniony przy śledzeniu, kiedy kod się pojawił lub znikł).
Te opcje pozwalają efektywnie odpowiedzieć na rzeczywiste pytania takie jak "kto to zmienił i kiedy", "co się zmieniło w ostatnim wydaniu" lub "kiedy ta funkcja została wprowadzona". git diff to sposób na precyzyjne badanie zmian — porównywanie katalogów roboczych, obszaru staging'u, commitów i gałęzi — niezbędne przy przeglądzie tego, co masz zamiar zacommitować (--staged), porównywaniu gałęzi i zrozumieniu różnic.
Znajomość przydatnych kombinacji (wizualizacja struktury gałęzi, śledzenie pełnej historii pliku z --follow w poprzek przemianowan, łączenie blame i show do zrozumienia, dlaczego linia się zmieniła) odzwierciedla efektywne umiejętności śledztwa.
Ponieważ zrozumienie ewolucji codebase'u i przeglądanie zmian to stałe potrzeby (do debugowania, code review, zrozumienia historii i śledzenia zmian), a git log i git diff z ich potężnymi opcjami to główne narzędzia do tego, zrozumienie, jak ich efektywnie używać — formatowanie i filtrowanie log'a (szczególnie pickaxe), porównania diff'a, i przydatne kombinacje — to wartościowa, często stosowana wiedza o Git, która zmienia inspektowanie historii z domysłów w precyzyjne śledztwo, przydatna umiejętność do zrozumienia i nawigacji po historii developmentu każdego codebase'u.
