Как выполнить поиск (поиск) зафиксированного кода в истории Git? - PullRequest
1276 голосов
/ 28 мая 2010

Я удалил файл или некоторый код в файле когда-то в прошлом. Могу ли я получить доступ к содержимому (не к сообщениям о коммитах)?

Очень плохим решением является поиск в журнале:

git log -p | grep <pattern>

Однако, это не возвращает хеш коммита сразу. Я играл с git grep безрезультатно.

Ответы [ 14 ]

1 голос
/ 28 мая 2010

Итак, вы пытаетесь просмотреть старые версии кода и посмотреть, где что-то существует в последний раз?

Если бы я делал это, я бы, вероятно, использовал git bisect . Используя bisect, вы можете указать известную хорошую версию, известную плохую версию и простой скрипт, который проверяет, является ли версия хорошей или плохой (в этом случае grep, чтобы увидеть, присутствует ли искомый код ). Запустив эту программу, вы обнаружите, когда код был удален.

0 голосов
/ 17 января 2019

Сценарий. Вы тщательно очистили свой код с помощью IDE.Проблема: IDE очистил больше, чем следовало бы, и теперь ваш код не компилируется (недостающие ресурсы и т. Д.)был изменен.

Теперь вы можете отменить это изменение и скомпилировать свой код.

0 голосов
/ 19 декабря 2017
git rev-list --all | xargs -n 5 git grep EXPRESSION

- это настройка решения @ Jeet, поэтому он показывает результаты во время поиска, а не только в конце (что может занять много времени в большом хранилище).

0 голосов
/ 31 июля 2015

В моем случае мне нужно было найти короткий коммит, и перечисленные решения, к сожалению, не работали.

Мне удалось сделать это с помощью: (заменить REGEX токен)

for commit in $(git rev-list --all --abbrev-commit)
do
    if [[ $commit =~ __REGEX__ ]]; then 
        git --no-pager show -s --format='%h %an - %s' $commit
    fi
done
...