Git diff: сравнить ветки, коммиты и изменения в индексе
Команда git diff показывает построчные различия. Без аргументов она сравнивает рабочую папку с индексом, то есть показывает изменения, которые ещё не добавлены командой git add. Для проиндексированных изменений используйте git diff --staged.
Какая команда что сравнивает
Команда | Что показывает |
|---|---|
| Рабочая папка и индекс: изменения, ещё не добавленные в индекс |
| Индекс и последний коммит: то, что попадёт в следующий коммит |
| Рабочая папка и последний коммит: все незакоммиченные изменения |
| Два коммита |
| Концы двух веток |
| Изменения ветки с момента ответвления от main |
| Один файл относительно коммита трёхкоммитной давности |
Базовые примеры
git diff # что изменено, но не добавлено в индекс
git diff --staged # что уже в индексе
git diff HEAD # всё, что не закоммичено
git diff HEAD~1 HEAD # что изменил последний коммитСравнить две ветки
git diff main feature/login # разница между текущими концами веток
git diff main...feature/login # только то, что добавлено в ветку после ответвленияРазница между двумя и тремя точками важна. Если main ушёл вперёд, запись с двумя точками покажет и его новые правки как «удалённые» в ветке, а запись с тремя точками покажет только работу ветки.
Сократить вывод
git diff --stat # список файлов и число изменённых строк
git diff --name-only # только имена файлов
git diff --name-status # имена и статус: A добавлен, M изменён, D удалён
git diff --shortstat # одна строка итогаИгнорировать пробелы и посмотреть по словам
git diff -w # игнорировать различия в пробелах
git diff --word-diff # подсвечивать изменения внутри строк по словам
git diff --check # найти лишние пробелы в конце строк и маркеры конфликтаСохранить изменения в файл
git diff > changes.patch # сохранить как патч
git apply changes.patch # применить патч в другом репозиторииСравнить два файла вне репозитория
git diff --no-index old.txt new.txtЧастые вопросы
Почему git diff ничего не показывает после git add?
Изменения уже в индексе, а git diff без аргументов сравнивает рабочую папку именно с индексом. Используйте git diff --staged.
Как посмотреть изменения только в одной папке?
Добавьте путь после двух дефисов: git diff main feature/login -- src/.