Показать файлы, которые есть в индексе Git и изменены в рабочей копии

У меня есть Git pre-commit hook, который удаляет пробелы и оставляет измененные файлы в рабочей копии, чтобы он не растоптал при частичном добавлении, например git add -p,

Если я фиксирую один файл из многих измененных, и пропуски исправляются, у меня тогда есть два файла, измененные в рабочей копии, и один промежуточный файл (который также находится в рабочей копии, но в поэтапном изменении есть ошибки пробела):

vi fileWithBadWS.txt  # leave bad whitespace
vi fileWithGoodWS.txt # don't leave bad whitespace
vi unrelatedFile.txt

git add fileWithBadWS.txt fileWithGoodWS.txt 
git commit -m "Commited files, one with bad whitespace" # pre-commit hook fails

Репо теперь выглядит так:

On branch master
Changes to be committed:

        modified:   fileWithBadWS.txt  # bad WS
        modified:   fileWithGoodWS.txt

Changes not staged for commit:

        modified:   fileWithBadWS.txt   # fixed WS
        modified:   unrelatedFile.txt                                 

Я могу использовать:

  • git diff видеть fileWithBadWS.txt а также unrelatedFile.txt
  • git diff --cached чтобы увидеть поставленные файлы fileWithBadWS.txt а также fileWithGoodWS,

Как я могу видеть только файлы, которые были изменены в рабочей копии и подготовлены (т.е. просто fileWithBadWS.txt)?

Примечание: в этом вопросе в качестве примера используются пробелы и перехваты перед фиксацией, но в более общем случае он применим к любой ситуации, когда некоторые файлы находятся в стадии подготовки, а некоторые нет, с некоторым перекрытием.

2 ответа

Решение

Как насчет этого?

git diff --name-only --staged | xargs git diff --name-only

Это покажет вам файлы, которые размещены, а также изменены в рабочем дереве.

git diff `git diff --name-only --cached`

Есть 2 части:

git diff --name-only --cached - получить имена файлов поставленных файлов

git diff file_list - перечислить изменения в этих файлах

Другие вопросы по тегам