Git grep добавил и изменил файлы в коммите
Я бы хотел git grep
шаблон в добавленных и измененных файлах каждого коммита в истории. В добавленных файлах grep должен только пытаться соответствовать добавленным строкам. В измененных файлах grep должен пытаться сопоставлять только добавленные / измененные / удаленные строки. Мне не нужно grep удаленных файлов. Мне нужно знать, была ли соответствующая строка добавлена, изменена или удалена. Вывод должен быть примерно таким:
A path/to/matched-file:match-of-added-line
M path/to/matched-file:match-of-modified-line
D path/to/matched-file:match-of-deleted-line
Где A / M / D означает, что линия была добавлена / изменена / удалена соответственно. У меня есть этот код до сих пор:
echo -n > log
# For each commit, in chronological order
for commit in $(git rev-list --reverse HEAD); do
# Get A/M files in commit
git diff --name-only "$commit" --diff-filter=A -- *.{c,h} > A_F &
git diff --name-only "$commit" --diff-filter=M -- *.{c,h} > M_F &
wait
# Grep A lines in A files in commit (not sure what to do here)
{
git grep -I -e <pattern> "$commit" -- "$(tr '\n' ' ' < A_F)" \
| sed "s/\^/A $commit/";
git grep -I -e <pattern> "$commit" -- "$(tr '\n' ' ' < M_F)" \
| sed "s/\^/M $commit/";
} >> log
done
# Print result
cat log
Код успешно ищет строки в добавленных / измененных файлах, но я пока не знаю, как конкретно искать добавленные / удаленные / удаленные строки.