Поиск в Git
git blame
Показывает информацию о всех внесенных в конкретный файл изменениях, а именно: кто, когда и в каком коммите последним изменил строку. Информация предоставляется о последней версии строки, но не об истории ее изменения, так же нет информации об удаленных строках.
blame построчно просматривает файл и про каждую строку говорит: что, кто и в какой момент привел ее в это состояние.
git blame можно применять к любому коммиту, в итоге получить информацию о состоянии файла на момент этого коммита
git blame <file-name> # показывает инфомацию о файле
commit-ID (user-name commit-time string-#) string
# ID-коммита (пользователь время номер строки) содержание строки
git blame HEAD <file-name> # состояние файла на моент последнего коммита
git blame HEAD~1 <file-name> # состояние файла на моент предпоследнего коммита
git blame <commit-ID> <file-name> # состояние файла на момент конкретного коммита
git blame <branch-name> <file-name> # состояние файла в конкретной ветке
git blame -s # убирает из вывода информацию и пользователе и времени создания коммита
git grep
В репозитории гита можно использовать класический поиск grep. Поиск происходит внутри файлов, в ответ выдается: имя файла и строка с найденым словом.
git grep <some-word> # поиск слова в отслеживаемых гитом файлах
git grep "some-string" # поиск строки, обязательно использовать кавычки
git grep -i "search" # поиск игнорирую регистр букв
git grep -n "search" # вывод с указанием номеров строк
git grep -l "search" # вывод только имен файлов в которых обнаружено совпадение
git log -S
Ищет коммиты в которых было измененно заданное слово или строка. Поиск идет либо по всем отслеживаемым файлам, либо в указанном файле.
git log -S <word> # ищет изменение заданного слова по всем коммитам и файлам
git log -S <word> <file-name> # ищет изменение слова в конкретном файле
git log -p -S <word> # дополняет обнаруженные коммиты подробностями того, что имеено изменил найденный коммит
git log -p --word-diff --oneline -S <word> # можно добавлять дополнительные флаги для систематизации вывода
git log -G
Ищет строки в которые вносились какие либо изменения. Отображает все коммиты в которых изменялась строка, в которой присутствует искомое слово.
git log -G "searching-text" # найдет все строки (в которых есть searching-text) в которые вносились какие-либо изменения на момент коммита.
git log -p --word-diff --oneline -G "searching-text" # можно добавлять дополнительные флаги для систематизации вывода
git log --grep
Ищет заданный текст в сообщениях коммита.
git log --oneline --grep "searching-text" # найдет все коммиты, в сообщениях которых есть искомый текст
git bisect
Бинарный поиск в гит. Если представить ситуацию, в которой пользователь неожиданно обнаружил ошибку, но на каком именно коммите она была допущена ответа нет. У гита есть алгоритм бинарного поиска, который работает следующим образом.
git bisect start # запускаем процесс бинарного поиска
# Теперь необходимо задать границы поиска
git bisect bad HEAD # начальная граница. мы знаем, что в этом коммите уже есть ошибка. можно указать любой коммит
git bisect good <commit-ID> # конечная граница поиска, в этом коммите ошибки нет
# Git переключается в середину истории коммитов, и показывает нам состояние файлов.
# Нам следует проверить есть ли в этом коммите искомая ошибка, если ошибка видна:
git bisect bad # гит продолжит поиск влево (назад во времени) от текушего коммита
# если ошибки нет:
git bisect good # гит продолжит поиск вправо (вперед во времени) от текушего коммита
# Процесс поиска будет продолжаться пока мы не найдем коммит в котором была сделана ошибка:
commit-ID is the first bad commit
# Теперь можно запомнить идентификатор коммита и завершить процесс поиска:
git bisect reset # процесс поиска завершен, HEAD возвращается на начальную позицию
# Далее можно переместиться на найденный коммит git checkout, создать новую ветку - внести изменения - закомитить их - влить в основную ветку.
git reflog
Журнал перемещений указателя HEAD. В нем храниться вся информация о перемещении HEAD: переключение между ветками, создание нового коммита, переключение между коммитами, сброс коммита (reset). Журнал ссылок храниться локально.