Вы можете разбить команды по отдельности.
$ git log --diff-filter=A --pretty=short -- foo
отображает журнал для файла "foo". Опция --diff-filter
показывает только коммиты, в которые были добавлены файлы («A»), и показывает их в сжатом формате (опция --pretty=short
). (--
является стандартом для выражения «ничего, что следует, является опцией», а все, что после этого является списком имен файлов, к которым должен применяться журнал.)
Тогда:
$ git blame -C -C -f $commit^! -- foo
git blame
аннотирует каждую строку файла информацией о последнем коммите. Опция double -C -C
активно проверяет строки, которые были скопированы из других файлов. Опция -f
показывает имя файла исходного коммита (это означает, что если строка была скопирована из другого файла, вы увидите имя файла, из которого она была скопирована). $commit^!
- это обозначение для $ commit; суффикс ^!
означает исключение всех родителей $ commit.
Итак, в основном, первая команда (git log
) помогает вам найти коммиты, которые вводят скопированные строки; вторая (git blame
) помогает вам найти источник для любых подозрительных коммитов, возвращаемых git log
.