При использовании Мерзавца из командной строки есть ли способ удалить одним махом все файлы, которые будут удалены в Измененном, но не обновленном списке? Вместо того, чтобы делать руководство удаляет подстановочные знаки использования.
Файлы, показанные как удаленные в разделе статуса «Изменен, но не обновлен», удаляются из дерева работ, но не из индекса. Чтобы выполнить удаление в индексе (т.е. удалить файл из индекса), вы можете сделать:
git diff -z --name-only --diff-filter=D | git update-index --remove -z --stdin
- diff-filter = D
показывает только отличия от индекса, которые представляют собой удаленные файлы, - name-only
просто выводит их имя, а -z
использует NUL для разделения имен файлов, так что вам не нужно беспокоиться о именах файлов со встроенными символами новой строки. update-index
затем удаляет указанные файлы из индекса.
Если у вас есть версия xargs
, которая поддерживает -0
, вы можете сделать немного проще:
git diff -z --name-only --diff-filter=D | xargs -0 git rm
Ну, файлы, перечисленные в разделе Изменены, но не обновлены , уже есть в индексе. Вы можете отменить их изменения, используя git checkout.
Чтобы удалить новые файлы, которые не были добавлены в индекс, вы можете использовать git clean
.
Но для удаления измененных файлов в индексе ... нет простого решения, вам, вероятно, придется использовать комбинацию git rm
и git ls-файлы
.
РЕДАКТИРОВАТЬ:
git ls-files -m
должен перечислить файлы, которые вы ищете. Объедините его с git rm
, и все готово:
git-ls files -m | xargs git rm // NOT TESTED
РЕДАКТИРОВАТЬ:
Я, вероятно, неправильно понял часть вашего вопроса. Мое решение удалит все файлы, перечисленные в разделе Изменены, но не обновлены . Если вы хотите удалить файлы, перечисленные как удаленные , вы должны использовать git diff
, как показывает Чарльз Бейли в своем ответе.