Показать файлы, которые есть в индексе 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
- перечислить изменения в этих файлах