Поиск и диффы¶
Git предоставляет мощные инструменты для поиска изменений в коде и сравнения версий.
Git Diff: Сравнение изменений¶
Базовое использование¶
Показать изменения в рабочей директории (не добавленные в индекс):
git diff
Показать изменения, которые уже в индексе (готовы к коммиту):
git diff --staged
# или
git diff --cached
Показать все изменения (и в индексе, и нет):
git diff HEAD
Сравнение веток и коммитов¶
Разница между двумя ветками:
git diff main feature
Разница между текущей веткой и конкретным коммитом:
git diff a1b2c3d
Разница между двумя конкретными коммитами:
git diff <хеш1> <хеш2>
Разница с ограничением по файлу:
git diff main feature -- path/to/file.js
Форматы вывода¶
Только имена измененных файлов:
git diff --name-only
Имена файлов и статистика (сколько строк добавлено/удалено):
git diff --stat
Показать только статистику без самого diff:
git diff --shortstat
Изменения по словам (а не по строкам):
git diff --word-diff
Полезно для просмотра изменений в текстах или документации.
Цветной вывод всегда:
git diff --color
Дифф для конкретного коммита¶
git show <хеш-коммита>
Показывает сам коммит и все изменения в нем.
git show --stat <хеш-коммита>
Коммит со статистикой изменений.
Git Log с фильтрацией¶
Поиск коммитов по различным критериям.
По автору¶
git log --author="Daniil"
git log --author="email@example.com"
По дате¶
# Коммиты за последнюю неделю
git log --since="1 week ago"
# Коммиты до определенной даты
git log --until="2024-01-01"
# Коммиты в диапазоне дат
git log --since="2024-01-01" --until="2024-02-01"
По тексту сообщения¶
git log --grep="баг"
git log --grep="fix" -i # регистронезависимый поиск
По изменениям в коде¶
Найти коммиты, где менялась конкретная строка:
git log -S "функцияLogin"
Покажет коммиты, где эта строка была добавлена или удалена.
Найти коммиты, где менялся файл:
git log -- path/to/file.js
Красивый формат вывода¶
git log --oneline --graph --all
Отображает историю в виде графа веток.
Свой формат:
git log --pretty=format:"%h | %ad | %s" --date=short
Где:
- %h — короткий хеш.
- %ad — дата коммита.
- %s — тема коммита.
Поиск по содержимому файлов¶
Git Grep¶
Быстрый поиск по всем файлам в репозитории (работает быстрее обычного grep).
Поиск строки:
git grep "текст для поиска"
Регистронезависимый поиск:
git grep -i "текст"
Поиск с номерами строк:
git grep -n "текст"
Поиск только в определенных файлах:
git grep "текст" -- "*.js"
Поиск регулярного выражения:
git grep -E "pattern\d+"
Показать контекст (строки до и после):
git grep -C 3 "текст" # 3 строки до и после
git grep -B 5 "текст" # 5 строк до
git grep -A 5 "текст" # 5 строк после
Поиск по истории изменений в строке¶
git log -p -S "старый_код"
Покажет все коммиты, где эта строка появлялась или исчезала, с полным diff.
Сравнение с удаленным репозиторием¶
Что изменилось на сервере по сравнению с локальной веткой:
git diff main origin/main
Какие коммиты есть на сервере, но нет у вас:
git log ..origin/main
Какие коммиты есть у вас, но еще не отправлены:
git log origin/main..
Полезные алиасы¶
Добавьте в конфиг для удобства:
git config --global alias.d 'diff'
git config --global alias.ds 'diff --stat'
git config --global alias.lg 'log --oneline --graph --all'
git config --global alias.ls 'log --stat'
git config --global alias.search 'grep -n'
Теперь можно писать:
git ds # вместо git diff --stat
git lg # вместо git log --oneline --graph --all
git search "текст" # вместо git grep -n "текст"