Pro programátory

Jak používat git diff - praktický průvodce

1. února 2026
12 min čtení
git diffgit compareverzovánígitcode reviewprogramování

Používám git diff denně. Před každým commitem, při code review, když hledám kde jsem něco rozbil. Tady jsou příkazy co mi fakt pomáhají.

Co git diff umí

Porovná různé stavy v repozitáři:

  • Co jsem změnil a ještě nepřidal do stage
  • Co je připravené ke commitu
  • Rozdíl mezi commity nebo větvemi

Kdy to potřebuju

  • Před commitem - co vlastně commituju?
  • Code review - co kolega změnil?
  • Debugging - kdy se ten bug objevil?
  • Merge konflikty - kdo co změnil?

Základní git diff příkazy

Zobrazení nestaged změn

# Zobrazí změny, které ještě nejsou staged
git diff

Tohle mi ukáže co jsem změnil, ale ještě nedal do stage.

Zobrazení staged změn

# Zobrazí změny připravené ke commitu
git diff --staged

# Starší syntaxe (funguje stejně)
git diff --cached

Tohle ukáže co přesně půjde do commitu.

Zobrazení všech změn

# Všechny změny (staged + unstaged) vs. HEAD
git diff HEAD

Porovnávání commitů a větví

Porovnání dvou commitů

# Porovná dva konkrétní commity
git diff abc123 def456

# Porovná commit s jeho předchůdcem
git diff abc123^..abc123

# Zkrácená verze pro předchůdce
git diff abc123^!

Porovnání větví

# Porovná dvě větve
git diff main feature-branch

# Co přibyde, když mergnu feature-branch do main
git diff main...feature-branch

# Změny pouze v souborech, které existují v obou větvích
git diff main..feature-branch

Pozor na tečky!

  • main..feature – Rozdíl mezi špičkami větví
  • main...feature – Rozdíl od společného předka

Porovnání s remote větví

# Porovná lokální main s origin/main
git diff main origin/main

# Co jsem změnil oproti remote
git diff origin/main HEAD

# Po git fetch vidíte nové změny na remote
git fetch origin
git diff main origin/main

Užitečné přepínače a možnosti

Statistiky změn

# Souhrn změněných souborů
git diff --stat

# Výstup:
# src/App.tsx     | 25 ++++++++++++---
# src/utils.ts    | 12 +++----
# README.md       |  5 ++-
# 3 files changed, 30 insertions(+), 12 deletions(-)

Pouze názvy souborů

# Seznam změněných souborů (bez obsahu)
git diff --name-only

# S typem změny (Added, Modified, Deleted)
git diff --name-status

# Výstup:
# M  src/App.tsx
# A  src/NewComponent.tsx
# D  src/OldComponent.tsx

Filtrování souborů

# Diff pouze pro konkrétní soubor
git diff -- src/App.tsx

# Diff pouze pro .tsx soubory
git diff -- "*.tsx"

# Diff pro celou složku
git diff -- src/components/

# Vyloučení souborů
git diff -- . ":(exclude)package-lock.json"
git diff -- . ":!package-lock.json"

Ignorování whitespace

# Ignoruje změny mezer a odsazení
git diff -w

# Ignoruje pouze změny na konci řádků
git diff --ignore-space-at-eol

# Ignoruje změny v množství mezer
git diff -b

Kontextové řádky

# Zobrazí více kontextu (výchozí je 3 řádky)
git diff -U10

# Zobrazí celý soubor
git diff -U9999

Výstupní formáty

Word diff

# Zobrazí změny po slovech, ne po řádcích
git diff --word-diff

# Výstup:
# Toto je [-starý-]{+nový+} text.

Perfektní pro dokumentaci, kde se mění jen jednotlivá slova.

Barevný výstup

# Vynucení barevného výstupu (i při přesměrování)
git diff --color=always | less -R

# Bez barev
git diff --color=never

Strojově čitelný formát

# Pro skripty – raw diff
git diff --raw

# Patch formát pro email
git diff --patch

Pokročilé techniky

Porovnání bez kontextu merge

# Zobrazí jen změny, ne merge context
git diff --no-ext-diff

Hledání konkrétních změn

# Najde commity, které přidaly/odebraly "TODO"
git log -S "TODO" --oneline

# Zobrazí diff těchto commitů
git log -S "TODO" -p

# Regex varianta
git log -G "function.*async" -p

Diff mezi soubory mimo git

# Porovná dva libovolné soubory (i mimo repo)
git diff --no-index file1.txt file2.txt

Interaktivní staging s diff

# Interaktivní výběr hunků ke staging
git add -p

# V interaktivním módu:
# y - stage tento hunk
# n - přeskočit
# s - rozdělit na menší hunky
# e - editovat hunk manuálně

Git diff pro code review

Efektivní review pull requestu

# 1. Stáhněte PR lokálně
git fetch origin pull/123/head:pr-123
git checkout pr-123

# 2. Porovnejte s cílovou větví
git diff main...pr-123

# 3. Zkontrolujte statistiky
git diff main...pr-123 --stat

# 4. Projděte soubor po souboru
git diff main...pr-123 -- src/components/

Vytvoření patch souboru

# Export diff jako patch
git diff main feature > my-changes.patch

# Aplikace patch souboru
git apply my-changes.patch

# Kontrola, zda patch půjde aplikovat
git apply --check my-changes.patch

Konfigurace git diff

Nastavení externího diff nástroje

# Nastavení VS Code jako diff tool
git config --global diff.tool vscode
git config --global difftool.vscode.cmd 'code --wait --diff $LOCAL $REMOTE'

# Použití diff tool
git difftool main feature

Užitečné aliasy

# Přidejte do ~/.gitconfig
[alias]
    d = diff
    ds = diff --staged
    dw = diff --word-diff
    dstat = diff --stat
    dlast = diff HEAD~1..HEAD
    dbranch = diff main...HEAD

Po nastavení můžete používat:

git d          # rychlý diff
git ds         # staged změny
git dw         # word diff
git dlast      # poslední commit
git dbranch    # změny ve větvi

Git diff vs. online nástroje

Kdy použít git diff

  • ✅ Lokální vývoj a debugging
  • ✅ Práce s historií repozitáře
  • ✅ Automatizace ve skriptech
  • ✅ Integrace s IDE

Kdy použít online nástroj

  • ✅ Porovnání textů mimo Git
  • ✅ Rychlé jednorázové porovnání
  • ✅ Sdílení výsledků s ne-technickými kolegy
  • ✅ Vizuálně přehlednější zobrazení

Pro online porovnání můžete využít PorovnejText.cz, který nabízí barevné zvýraznění syntaxe pro 22 programovacích jazyků.

Řešení běžných problémů

"Diff zobrazuje změny, které jsem neudělal"

# Problém může být v line endings
git diff --ignore-space-at-eol

# Nebo v .gitattributes
echo "* text=auto" > .gitattributes

"Diff je příliš velký"

# Omezení na konkrétní soubory
git diff -- src/important-file.ts

# Nebo pouze statistiky
git diff --stat

# Nebo jen názvy souborů
git diff --name-only

"Potřebuji vidět starší verzi souboru"

# Zobrazí soubor z konkrétního commitu
git show abc123:src/App.tsx

# Porovná aktuální s verzí z před týdne
git diff HEAD@{1.week.ago} -- src/App.tsx

Git diff ve workflows

Pre-commit kontrola

#!/bin/bash
# .git/hooks/pre-commit

# Kontrola staged změn pro debug statements
if git diff --staged | grep -E "console\.log|debugger" > /dev/null; then
    echo "VAROVÁNÍ: Nalezeny debug statements v kódu!"
    echo "Odstraňte console.log nebo debugger před commitem."
    git diff --staged | grep -n -E "console\.log|debugger"
    exit 1
fi

CI/CD pipeline

# .github/workflows/lint-changed.yml
name: Lint Changed Files

on: pull_request

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Get changed files
        id: changed
        run: |
          echo "files=$(git diff --name-only origin/main...HEAD -- '*.ts' '*.tsx' | tr '\n' ' ')" >> $GITHUB_OUTPUT

      - name: Lint changed files
        if: steps.changed.outputs.files != ''
        run: npx eslint ${{ steps.changed.outputs.files }}

Tipy pro efektivní používání

1. Nastavte si aliasy – Často používané příkazy zkraťte

2. Používejte --stat první – Získejte přehled před detailním zkoumáním

3. Filtrujte soubory – Neztrácejte se v package-lock.json

4. Kombinujte s git log – Pochopte kontext změn

5. Naučte se git add -p – Commitujte jen relevantní změny

Co si z toho odnést

Git diff používám fakt denně. Základy (git diff, git diff --staged) stačí na 90% práce. Aliasy šetří čas. A -S pro hledání v historii je killer feature.

Naučte se to a code review i debugging budou mnohem rychlejší.


Potřebujete rychle porovnat dva kusy kódu bez přístupu ke git? Vyzkoušejte náš Code Diff nástroj s podporou 22 programovacích jazyků – vše probíhá přímo ve vašem prohlížeči.

Vyzkoušejte PorovnejText.cz zdarma

Nejrychlejší český nástroj pro porovnání textů. Vše probíhá ve vašem prohlížeči, žádná registrace není potřeba.

Porovnat texty nyní →