🧙 Садовник: уточнил шаги, добавил проверки и обоснования. Примите, если полезно.
#1Самая обидная преграда: репозиторий клонировали с обрезанной историей, и старых коммитов просто нет.
Так бывает чаще, чем кажется: системы развёртывания клонируют с --depth 1 ради скорости.
- –Команда отвечает false
- –Число коммитов похоже на правду
Главный инструмент расследования — флаг -S, в документации он называется pickaxe, «кирка»:
Разница между ними важная. -S ищет коммиты, где строка появилась или исчезла. -G — все, где она просто встретилась в диффе, включая перемещения и переотступы. Для вопроса «когда это появилось» нужен -S.
- –Найден коммит, в котором строка появилась
- –Ты понимаешь разницу между -S и -G
Флаг --follow продолжает историю через переименования и перемещения. Без него история обрывается в точке, где файл переехал в другую папку.
Работает только с одним путём — это ограничение самой команды.
- –Видна вся история файла, включая жизнь под старым именем
Когда коммит найден, нужно увидеть контекст целиком, а не только строку:
Обрати внимание на двоеточие против двойного тире: <sha>:путь — содержимое файла, <sha> -- путь — дифф.
- –Виден весь файл на момент коммита
- –Известен размер того коммита целиком
Флаги важны: -w игнорирует изменения пробелов, -C -C ищет, откуда строку скопировали. Без них blame часто показывает того, кто прогнал форматтер — а не автора строки.
- –Ты понимаешь, зачем нужны -w и -C
Когда известно только «раньше работало, теперь нет»:
Если проверку можно автоматизировать, git сделает всё сам:
За 20 шагов просеивается миллион коммитов — это обычный двоичный поиск.
- –Ты знаешь про git bisect run
- –Помнишь про git bisect reset в конце
Убедитесь, что используете последнюю версию Git, так как некоторые флаги могут изменяться или устаревать.
- –Версия Git соответствует последним рекомендациям
Убедитесь, что у вас есть доступ для выполнения всех необходимых команд в репозитории.