Я бы порекомендовал посмотреть на три инструмента в наборе инструментов git. Первый - это вина, которая очень похожа на cvs. Он показывает, какой коммит последний раз коснулся каждой строки в файле. Если вы хотите посмотреть, что там было раньше, вы можете взять коммит, который коснулся строки, и посмотреть предыдущий коммит.
git show <sha1_of_interesting_commit>^ -- file/path
Вы можете повторить вину, чтобы увидеть, что произошло до этого.
git blame <sha1_of_interesting_commit>^ -- file/path
Второй инструмент использует --follow
для отслеживания файлов после переименований.
git log --follow -- file/path
Третий - и, возможно, самый полезный инструмент - это опция кирки для регистрации. Это ищет в истории изменения удаленных, введенных или измененных строк, которые содержат заданный бит текста. Это особенно полезно для отслеживания таких вещей, как имена функций. Он может быть новым в файле в конкретном коммите, но пришел ли он из другого исходного файла? Был ли добавлен вызов к нему в то же время или до того, как он был перемещен?
git log -S"Interesting_Function"
Если вы используете параметр патча или статистики (например, -p
или --stat
), вывод будет ограничен теми файлами, чьи изменения действительно затрагивают строку поиска, если вы не используете --pickaxe-all
, где отображается все изменение .
В сочетании с git grep
, чтобы показать, где находятся все текущие вхождения строки, кирка является чрезвычайно полезным инструментом для поиска истории.