git diff pokazuje, co się zmieniło — linijka po linijce. To Twoje główne narzędzie do odpowiedzi na pytanie „co ja właściwie zedytowałem, zanim to commitnę?”. Domyślnie porównuje drzewo robocze (Twoje pliki na dysku) z poczekalnią (staging area), czyli pokazuje zmiany, których jeszcze nie dodałeś przez git add. Z odpowiednimi argumentami porówna też poczekalnię z ostatnim commitem, dwa dowolne commity albo dwie gałęzie. Wynik to klasyczny diff: linie z - usunięte, z + dodane.
Składnia i najważniejsze opcje
Podstawowa forma: git diff [--staged] [
--staged(albo--cached) — porównuje to, co jest w poczekalni, z ostatnim commitem. Czyli pokazuje dokładnie to, co wejdzie do następnego commita.--stat— zamiast pełnego diffa daje podsumowanie: które pliki i ile linii się zmieniło.--name-only— tylko lista zmienionych plików, bez treści zmian.--name-status— lista plików z literą statusu (Mzmodyfikowany,Adodany,Dusunięty).-w(albo--ignore-all-space) — ignoruje zmiany w białych znakach. Ratunek, gdy ktoś przeformatował wcięcia.--word-diff— pokazuje różnice na poziomie słów, nie całych linii. Wygodne przy edycji tekstu.--— oddziela opcje od ścieżek; po nim podajesz pliki/katalogi do porównania.
Przykłady użycia
git diff— niezacommitowane zmiany w drzewie roboczym, których jeszcze nie dodałeś do poczekalni.git diff --staged— to, co masz w poczekalni i zaraz commitniesz. Zawsze warto zerknąć przedgit commit.git diff main feature— różnice między gałęziamimainifeature(od stanu pierwszej do drugiej).git diff HEAD~1 HEAD -- src/app.js— co zmieniło się w plikusrc/app.jsw ostatnim commicie.git diff --stat— szybki przegląd skali zmian, gdy nie chcesz przewijać setek linii.
Częste błędy i pułapki
Najczęstsza wpadka: robisz git add, potem git diff i widzisz pustkę. To normalne — gołe git diff pokazuje tylko to, czego jeszcze nie dodałeś. Po dodaniu do poczekalni używaj git diff --staged. Druga pułapka to zakresy: git diff A..B porównuje końcowe stany dwóch commitów, a git diff A...B (trzy kropki) porównuje B ze wspólnym przodkiem obu gałęzi — to nie to samo, łatwo się pomylić przy code review.
Pamiętaj, że domyślnie git diff nie pokaże plików nieśledzonych (untracked) — żeby je zobaczyć, dodaj je najpierw albo zerknij przez git status. Wynik wpada do pagera (zwykle less); wyjdziesz klawiszem q. A jeśli diff to ściana czerwieni przez różnice w końcach linii (CRLF vs LF na Windows kontra Linux), ratuj się -w i sprawdź ustawienie core.autocrlf.
Powiązane komendy: git status, git add, git log -p, git show, git difftool.