Вероятно, есть более аккуратный способ сделать это, но я думаю, что работает следующее:
Если последняя ревизия перед изменениями была fa1afe1
, то вы можете найти все файлы, которые изменились в app/views
с помощью:
git diff --name-only fa1afe1 -- app/views
Кроме того, вы можете видеть все файлы, которые git отслеживает под app/views
с помощью:
git ls-files app/views
Теперь вы можете найти все строки, которые появляются только ввывод одной из этих команд с использованием comm -3
и синтаксиса подстановки процессов в bash:
comm -3 <(git diff --name-only fa1afe1 -- app/views|sort) <(git ls-files app/views|sort)
(Возможно, вам будет удобнее отправить выходные данные двух команд во временные файлы и затем использовать comm
вместо использования процесса подстановки, с тех пор у вас будет решение, которое будет работать и с /bin/sh
, и его будет легче понять.)
Эта команда также покажет файлы, которые были удалены в изменениях, посколькуfa1afe1
, поскольку эти файлы не будут отображаться в выводе git ls-files
.В качестве другого предупреждения, строго говоря, это просто покажет вам файлы, которые отличаются между этим коммитом и сейчас, поэтому он пропустит файлы, которые были изменены в одном коммите и впоследствии возвращены к их исходному содержимому.Если это проблема, тогда вы можете использовать git log
с --name-only
и соответствующим форматированием для создания списка измененных файлов вместо git diff
.