git diff

Wyświetla różnice między commitami, poczekalnią a drzewem roboczym.

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] [] [-- <ścieżka>]

  • --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 (M zmodyfikowany, A dodany, D usunię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ąć przed git commit.
  • git diff main feature — różnice między gałęziami main i feature (od stanu pierwszej do drugiej).
  • git diff HEAD~1 HEAD -- src/app.js — co zmieniło się w pliku src/app.js w 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.